求助P1101
  • 板块学术版
  • 楼主HHY130034
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/9 22:29
  • 上次更新2024/8/10 08:49:25
查看原帖
求助P1101
1242779
HHY130034楼主2024/8/9 22:29

求助大佬!!!

为什么下面这个代码过不了P1101 的#4#5啊啊啊啊啊啊啊啊

#include<bits/stdc++.h>
using namespace std;

int c[10000][2],rear;//c数组用于存储可执行dfs的节点 
const int dx[9]={0,1,0,1,-1,0,-1,1,-1},dy[9]={0,0,1,1,0,-1,-1,-1,1};
const char g[9]=" yizhong";
char a[103][103],b;
bool s[102][102];

bool dfs(int x,int y,int m,int n,int nx){
    if(nx>=8){//查找完成,有完整的单词 
        s[x][y]=1;
        return 1;
    }
    if(a[x+m][y+n]==g[nx])//当前节点仍然满足要求 
        if(dfs(x+m,y+n,m,n,nx+1)){
        	s[x][y]=1;
        	return 1;
        }
    return 0;
}
int main(){
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin >> a[i][j];
            if(a[i][j]=='y'){
			//出现y说明有可能存在单词,因此在c数组中记录(i,j)
            	rear++;
                c[rear][0]=i;
                c[rear][1]=j;
            }   
        }
    }
    while(rear--){
        int x=c[rear][0];
        int y=c[rear][1];
        for(int w=1;w<=8;w++){
        	if(a[x+dx[w]][y+dy[w]]=='i')//再次判断,节省时间 
            	if(dfs(x+dx[w],y+dy[w],dx[w],dy[w],3))//用方向数组进行dfs 
            		s[x][y]=1;//找到了该单词,记录位置 
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(s[i][j])cout<<a[i][j];
            else cout<<"*";
        }
        cout<<endl;
    }
    return 0;
}
2024/8/9 22:29
加载中...