60pts 求助
查看原帖
60pts 求助
1237628
Heavenly_meteorite楼主2024/11/6 19:25
#include<bits/stdc++.h>
using namespace std;
char Map[110][110];
bool visit[110][110];
int n;
int dx[]={1,1,1,-1,-1,-1,0,0};
int dy[]={0,-1,1,0,-1,1,-1,1};
char next(char a){
	if(a=='y'){
		return 'i';
	}
	else if(a=='i'){
		return 'z';
	}
	else if(a=='z'){
		return 'h';
	}
	else if(a=='h'){
		return 'o';
	}
	else if(a=='o'){
		return 'n';
	}
	else if(a=='n'){
		return 'g';
	}
	else{
		return ';';
	}
}
char lat(char a){
	if(a=='g'){
		return 'n';
	}
	else if(a=='n'){
		return 'o';
	}
	else if(a=='o'){
		return 'h';
	}
	else if(a=='h'){
		return 'z';
	}
	else if(a=='z'){
		return 'i';
	}
	else if(a=='i'){
		return 'y';
	}
	else{
		return '*';
	}
}
char dfs(int x,int y,int size,int last){
	if(size==7){
		visit[x][y]=true;
		Map[x][y]='g';
		return 'g';
	}
	for(int i=0;i<8;i++){
		int new_x=x+dx[i];
		int new_y=y+dy[i];
		if(new_x>0&&new_y>0&&new_x<=n&&new_y<=n&&next(Map[x][y])==Map[new_x][new_y]&&(last==-1||last==i)){
			char o=lat(dfs(new_x,new_y,size+1,i));
			if(visit[x][y]==false||(Map[x][y]=='*'&&o!='*')){
				Map[x][y]=o;
			}
			if(Map[x][y]!='*'){
				visit[x][y]=true;
			}
			return Map[x][y];
		}
	}
	return '*';
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>Map[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(!visit[i][j]&&Map[i][j]=='y'){
				Map[i][j]=dfs(i,j,1,-1);
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(visit[i][j]){
				cout<<Map[i][j];
			}
			else{
				cout<<"*";
			}
		}
		cout<<endl;
	}
	return 0;
}

看起来没有问题,可就是60,有大佬帮帮本蒟蒻吗

2024/11/6 19:25
加载中...