以前的代码:
#include<iostream>
#include<queue>
using namespace std;
int n;
char a[110][110];
bool b[110][110];
int fx[9]={0,1,1,-1,-1,0,1,-1};
int fy[9]={1,0,1,-1,0,-1,-1,1};
char yi[9]={'y','i','z','h','o','n','g'};
queue<int> q;
void dfs(){
if(q.empty()) return;
int x=q.front()/1000,y=q.front()%1000;
for(int i=0;i<8;i++){
int sum=1;
for(int j=1;j<=6;j++){
int nx=x+j*fx[i];
int ny=y+j*fy[i];
if(nx<1||nx>n||ny<1||ny>n){
sum=0;
break;
}
if(yi[j]!=a[nx][ny]){
sum=0;
break;
}
}
if(sum==0) continue;
for(int j=0;j<=6;j++){
int nx=x+j*fx[i];
int ny=y+j*fy[i];
b[nx][ny]=1;
}
}
q.pop();
dfs();
return;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
if(a[i][j]=='y')
q.push(i*1000+j);
}
}
dfs();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
if(b[i][j]) cout<<a[i][j];
else cout<<"*";
cout<<endl;
}
return 0;
}
改了存入时i,j的开始值:
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]=='y')
q.push(i*1000+j);
}
}
为什么就AC了?