华尔兹

有一个 n x m 大小的网格,其中有些格点比较特殊,当玩家站在上面的时候会自动移动到相邻四个方向之一,另外一些格点暂时还并不特殊,因为它们的移动方向还未知,如下图:
华尔兹_第1张图片

上图中,第一列和最后一行格点的移动方向未知,其他点的移动方向已经确定了,已经在图中用箭头指出其方向。
现在给定一个起点(上图中的绿色方块)和一个终点(上图中的红色方块),你需要给其中一些移动方向未知的格点确定一个方向,使得玩家能从起点移动到终点。
如下图是一个方案,其中蓝色格点标注出了从起点到终点的路径:
华尔兹_第2张图片

输入描述:
对于一个关卡,其对应的文件描述如下。
第一行六个空格隔开的整数 n,m,sx,sy,tx,ty,它们的意义分别如下:

  • n 和 m 描述地图的大小,它们分别表示地图的行数、列数。
  • sx,sy 分别表示起点的行、列坐标,即起点为第 sx 行第 sy 列的格点。(行、列的编号均从 1 开始)
  • tx,ty 分别表示终点的行、列坐标,描述规则同上。
    接下来 n 行每行 m 个字符,每个字符表示网格对应位置的状态,不同字符的意义如下:
  • w表示向上移动
  • s表示向下移动
  • a表示向左移动
  • d表示向右移动
  • .表示方向未确定

输出描述:
对于一个关卡,其对应的输出文件为将其输入文件中 . 替换为 w, a, s, d 中任意一个字符的结果,其余内容与格式不变。
示例1
输入
4 4 1 1 4 4
.aaa
.www
.sss

输出
4 4 1 1 4 4
saaa
swww
dsss
dddw

#include
using namespace std;
char ch[5],a[201][201];
int n,m,sx,sy,tx,ty,x[5001],y[5001];
int from[201][201];
int main()
{
     
	scanf("%d%d%d%d%d%d",&n,&m,&sx,&sy,&tx,&ty);
	printf("%d %d %d %d %d %d\n",n,m,sx,sy,tx,ty);
	ch[1]='s'; ch[2]='d'; ch[3]='w'; ch[4]='a';
	for(int i=1;i<=n;i++)
		scanf("%s",a[i]+1);
	from[tx][ty]=1;
	x[1]=tx;y[1]=ty;
	for(int h=1,t=1;h<=t;h++)
	{
     
		if(x[h]>1)
			if((a[x[h]-1][y[h]]=='.' || a[x[h]-1][y[h]]=='s') && !from[x[h]-1][y[h]])
			{
     
				from[x[h]-1][y[h]]=1;
				x[++t]=x[h]-1;y[t]=y[h];
				if(x[t]==sx && y[t]==sy)
					break;
			}
		if(y[h]>1)
			if((a[x[h]][y[h]-1]=='.' || a[x[h]][y[h]-1]=='d') && !from[x[h]][y[h]-1])
			{
     
				from[x[h]][y[h]-1]=2;
				x[++t]=x[h];y[t]=y[h]-1;
				if(x[t]==sx && y[t]==sy)
					break;
			}
		if(x[h]<n)
			if((a[x[h]+1][y[h]]=='.' || a[x[h]+1][y[h]]=='w') && !from[x[h]+1][y[h]])
			{
     
				from[x[h]+1][y[h]]=3;
				x[++t]=x[h]+1;y[t]=y[h];
				if(x[t]==sx && y[t]==sy)
					break;
			}
		if(y[h]<m)
			if((a[x[h]][y[h]+1]=='.' || a[x[h]][y[h]+1]=='a') && !from[x[h]][y[h]+1])
			{
     
				from[x[h]][y[h]+1]=4;
				x[++t]=x[h];y[t]=y[h]+1;
				if(x[t]==sx && y[t]==sy)
					break;
			}
	}
	for(int i=1;i<=n;i++,puts(""))
		for(int j=1;j<=m;j++)
			if(a[i][j]!='.') putchar(a[i][j]);
			else
			if(from[i][j]) putchar(ch[from[i][j]]);
			else putchar('w');
	return 0;
}

你可能感兴趣的:(牛客,华尔兹,图论,dfs,数据结构,算法)