社区讨论

80分求助!!!WA on #2

P4554小明的游戏参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lu2dtia3
此快照首次捕获于
2024/03/22 16:11
2 年前
此快照最后确认于
2024/03/22 18:54
2 年前
查看原帖
rt
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=510;
int a[N][N],v[N][N],n,m;
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
int d[N][N],sx,sy,ex,ey;
struct node{
	int x,y;
	node():x(),y(){}
	node(int x,int y):x(x),y(y){}
};
void spfa()
{
	deque<node> q;
	q.push_front(node(sx,sy));
	memset(d,0x3f,sizeof(d));
	d[sx][sy]=0;
	//v[sx][sy]=1;
	while(!q.empty())
	{
		int x=q.front().x,y=q.front().y;
		q.pop_front();
		//v[x][y]=0;
		for(int i=0;i<4;i++)
		{
			int xx=x+dx[i],yy=y+dy[i];
			if(xx>=1 && xx<=n && yy>=1 && yy<=m)
			{
				if(d[xx][yy]>d[x][y]+(a[xx][yy]!=a[x][y]))
				{
					d[xx][yy]=d[x][y]+(a[xx][yy]!=a[x][y]);
					if(a[xx][yy]==a[x][y])
						q.push_front(node(xx,yy));
					else
						q.push_back(node(xx,yy));
				}
				if(xx==ex && yy==ey)
					return ;
			}
		}
	}
}
/*int ans=251000;
void bfs(int ex,int ey)
{
	while(!q.empty())
	{
		int x=q.front().x,y=q.front().y,cost=q.front().cost;
		q.pop();
		if(x==ex && y==ey)
		{
			if(ans==251000)
				ans=cost;
			else
				ans=min(ans,cost);
		}
		if(cost>=ans)
			continue;
		for(int i=0;i<4;i++)
		{
			int xx=x+dx[i],yy=y+dy[i];
			if(xx>=1 && xx<=n && yy>=1 && yy<=m/* && v[xx][yy]==0)
			{
				v[xx][yy]=1;
				if(a[xx][yy]!=a[x][y])
					q.push(node(xx,yy,cost+1));
				else
					q.push(node(xx,yy,cost));
			}
		}
	}
}*/
int main()
{
	scanf("%d%d",&n,&m);
	while(n!=0)
	{
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
			{
				char c;cin>>c;
				if(c=='@')
					a[i][j]=1;
			}
		scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
		sx++,sy++,ex++,ey++;
		//v[sx][sy]=1;
		//bfs(ex,ey);
		spfa();
		printf("%d\n",d[ex][ey]);
		//ans=251000;
		//memset(v,0,sizeof(v));
		scanf("%d%d",&n,&m);
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...