只得了20,大佬帮忙看看
查看原帖
只得了20,大佬帮忙看看
490978
小超手123楼主2021/8/30 17:13
#include<bits/stdc++.h>
using namespace std;
int n; //地图大小:n*n
int next[10][3]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};//8个方向的偏移量 
char a[110][110],ans[110][110];//a:输入数组 ans:答案数组 
bool vis[110][110];
string s="yizhong";//寻找目标 
bool f=false;//标记是否找到一个完整的yizhong 
void dfs(int x,int y,int step){//step:搜索层数 
	if(step==7){ //搜索到终点 
		f=true; //f标记为找到 
		return;
	}
	for(int i=0;i<8;i++){ //向8个方向搜索 
		int dx=x+next[i][0],dy=y+next[i][1];
		if(dx<1||dx>n||dy<1||dy>n||a[dx][dy]!=s[step]||vis[dx][dy]==1){ //不合法则跳出 
			continue;
		}
		vis[dx][dy]=0;
		dfs(dx,dy,step+1);
		vis[dx][dy]=1;
		if(f==true)ans[dx][dy]=a[dx][dy];
	}
}
int main() {
    cin>>n;
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=n;j++){
    		cin>>a[i][j];
		}
	}  //输入 
	for(int i=1;i<=n;i++){
    	for(int j=1;j<=n;j++){
    		if(a[i][j]=='y'){ //如果找到开头:y  
    			f=false; //f标记为没找到 
    			memset(vis,0,sizeof(vis));
    			dfs(i,j,0); //开始搜索 
			}
		}
	}
	for(int i=1;i<=n;i++){
    	for(int j=1;j<=n;j++){
    		if('a'<=ans[i][j]&&ans[i][j]<='z')cout<<ans[i][j];
    		else cout<<"*";
		}
		cout<<endl;
	}
	return 0;
}
2021/8/30 17:13
加载中...