P1101求助
查看原帖
P1101求助
754040
yeqiwei楼主2024/8/21 20:46

rt, 代码如下:

#include<iostream>
using namespace std;
struct Node{
	int x,y;
};
char map[100][100];
int n;
char word[8]="yizhong";
short offx[8]={0,0,-1,1,-1,1,-1,1};
short offy[8]={-1,1,0,0,-1,-1,1,1};
char ans[100][100];
int num;
Node start[10000];
void setans(int x,int y,int dire)
{
	ans[x][y]='g';
	for(int i=0;i<6;++i)
		ans[x-offx[dire]][y-offy[dire]]=word[6-i];
}
void dfs(int x,int y,int cnt,int dire)
{
	if(cnt==6&&map[x][y]=='g')
	{
		setans(x,y,dire);
		return;
	}
	if(x+offx[dire]<0||x+offx[dire]>=n||y+offy[dire]<0||y+offy[dire]>=n||map[x+offx[dire]][y+offy[dire]]=='*'||map[x+offx[dire]][y+offy[dire]]!=word[cnt+1])
		return;
	dfs(x+offx[dire],y+offy[dire],cnt+1,dire);
}
int main()
{
	cin>>n;
	for(int i=0;i<n;++i)
		for(int j=0;j<n;++j)
		{
			cin>>map[i][j];
			if(map[i][j]!='y'&&map[i][j]!='i'&&map[i][j]!='z'&&map[i][j]!='h'&&map[i][j]!='o'&&map[i][j]!='n'&&map[i][j]!='g')
				ans[i][j]='*',map[i][j]='*';
			if(map[i][j]=='y')
				start[num].x=i,start[num++].y=j;
		}
	for(int i=0;i<num;++i)
		for(int j=0;j<8;++j)
			dfs(start[i].x,start[i].y,0,j);
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<n;++j)
			cout<<ans[i][j];
		cout<<"\n";
	}
}

本地调试时正确地通过了样例1,样例2的输出为:

*     ig
g ** **
i* *  *
 ** **
   * **

 **** i
       g

代码看不懂私我

2024/8/21 20:46
加载中...