20分求助!
查看原帖
20分求助!
107843
Citrine楼主2020/11/17 13:37
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
class node
{
public:
	int x,y,l;
	node(int a=0,int b=0,int c=0):x(a),y(b),l(c){}
};
queue<node>Q;
int n,m;
int mp[3000][3000]={};
int vis[3000][3000]={};
char c;
int main()
{
	// freopen("game.in","r",stdin);
	// freopen("game.out","w",stdout);
	scanf("%d %d",&n,&m);
	memset(mp,-1,sizeof(mp));
	memset(vis,-1,sizeof(vis));
	for (register int i=1;i<=n;i++)
	{
		for (register int j=1;j<=m;j++)
		{
			c=getchar();
			while (c=='\n'||c==' ')
			{
				c=getchar();
			}
			if (c=='.')
			{
				mp[i][j]=1;
				vis[i][j]=-1;
			}
			if (c=='#')
			{
				mp[i][j]=0;
				vis[i][j]=-1;
			}
			if (c=='d')
			{
				mp[i][j]=2;
				vis[i][j]=-1;
			}
			if (c=='m')
			{
				Q.push(node(i,j,0));
				mp[i][j]=1;
				vis[i][j]=0;
			}
		}
	}
	while (!Q.empty())
	{
		node temp=Q.front();
		Q.pop();
		int i=temp.x,j=temp.y,k=temp.l;
		if (mp[i][j]==2)
		{
			printf("%d",k);
			return 0;
		}
		if (mp[i+1][j]>0&&vis[i+1][j]<0)
		{
			vis[i+1][j]=k+1;
			Q.push(node(i+1,j,k+1));
		}
		if (mp[i-1][j]>0&&vis[i-1][j]<0)
		{
			vis[i-1][j]=k+1;
			Q.push(node(i-1,j,k+1));
		}
		if (mp[i][j+1]>0&&vis[i][j+1]<0)
		{
			vis[i][j+1]=k+1;
			Q.push(node(i,j+1,k+1));
		}
		if (mp[i][j-1]>0&&vis[i][j-1]<0)
		{
			vis[i][j-1]=k+1;
			Q.push(node(i,j-1,k+1));
		}
	}
	// for (register int i=1;i<=n;i++)
	// {
	// 	for (register int j=1;j<=m;j++)
	// 	{
	// 		printf("%d ",vis[i][j]);
	// 	}
	// 	putchar('\n');
	// }
	printf("No Way!\n");
	return 0;
}

和题解对拍,答案都一样。

但是提交上去就是20分。。。

很多点都莫名其妙地 No Way 了。。。

2020/11/17 13:37
加载中...