妈的 ,输出和答案一样为什么过不了,救命啊,爸爸们!
查看原帖
妈的 ,输出和答案一样为什么过不了,救命啊,爸爸们!
628938
xcs3530866162楼主2022/7/11 15:13
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int n;
char check[8]="yizhong";
vector<string>v;
bool dfs(int i, int j, int p, int dir)
{
    if(p==6 && (v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p])){
        v[i][j]=toupper(v[i][j]);
        return true;
    }
    if(dir==1)     //上
    {
        if((v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p]) && i-1>=0 && dfs(i-1,j,p+1,1)==true){
            v[i][j]=toupper(v[i][j]);
        }
        else
            return false;
    }
    else if(dir==2)     //下
    {
        if((v[i][j] == check[p] || (char)(tolower(v[i][j]))==check[p]) && i+1<n && dfs(i+1,j,p+1,2))
            v[i][j]=toupper(v[i][j]);
        else
            return false;
    }
    else if(dir==3)     //左
    {
        if((v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p]) && j-1>=0 && dfs(i,j-1,p+1,3))
            v[i][j]=toupper(v[i][j]);
        else
            return false;
    }
    else if(dir==4)     //右
    {
        if((v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p]) && j+1<n && dfs(i,j+1,p+1,4))
            v[i][j]=toupper(v[i][j]);
        else
            return false;
    }
    else if(dir==5)     //左上
    {
        if((v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p]) && i-1>=0 && j-1>=0 && dfs(i-1,j-1,p+1,5))
            v[i][j]=toupper(v[i][j]);
        else
            return false;
    }
    else if(dir==6)     //右上
    {
        if((v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p]) && i-1>=0 && j+1<n && dfs(i-1,j+1,p+1,6))
            v[i][j]=toupper(v[i][j]);
        else
            return false;
    }
    else if(dir==7)     //左下
    {
        if((v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p]) && i+1<n && j-1>=0 && dfs(i+1,j-1,p+1,7))
            v[i][j]=toupper(v[i][j]);
        else
            return false;
    }
    else if(dir==8)     //右下
    {
        if((v[i][j]==check[p] || (char)(tolower(v[i][j]))==check[p]) && i+1<n && j+1<n && dfs(i+1,j+1,p+1,8))
            v[i][j]=toupper(v[i][j]);
        else
            return false;
    }
}

int main()
{
    scanf("%d",&n);
    v.resize(n);
    for(int i=0;i<n;i++)
        cin>>v[i];

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(v[i][j]=='y')
            {
                dfs(i,j,0,1);
                dfs(i,j,0,2);
                dfs(i,j,0,3);
                dfs(i,j,0,4);
                dfs(i,j,0,5);
                dfs(i,j,0,6);
                dfs(i,j,0,7);
                dfs(i,j,0,8);
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(v[i][j]<97)
                cout<<(char)tolower(v[i][j]);
            else
                cout<<"*";
        }
        cout<<endl;
    }
    return 0;
}
我的答案
*yizhong
gy******
n*i*****
o**z****
h***h***
z****o**
i*****n*
y******g
标准答案
*yizhong
gy******
n*i*****
o**z****
h***h***
z****o**
i*****n*
y******g
2022/7/11 15:13
加载中...