不懂就问
  • 板块P1101 单词方阵
  • 楼主LYQ310北极企鹅
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/25 14:10
  • 上次更新2023/10/27 05:58:52
查看原帖
不懂就问
516634
LYQ310北极企鹅楼主2022/10/25 14:10

以前的代码:

#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了?

2022/10/25 14:10
加载中...