为什么下面这个代码过不了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;
}