不太理解这是怎么错的
查看原帖
不太理解这是怎么错的
319803
CarroT1212楼主2022/3/2 11:24

Dijkstra堆优化,80分,第二个点WA

本人码风清奇不喜轻喷

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
int n,m,sx,sy,dx,dy,mp[710][710],dis[710][710],flag[710][710];
int xx[4]={-1,0,0,1},yy[4]={0,-1,1,0};
struct graph {
	int x,y,dis;
	bool operator<(const graph r1) const {return r1.dis<dis;}
}temp;
priority_queue <graph> q;
int main() {
	while (1) {
		memset(mp,0,sizeof(mp));
		memset(dis,0x3f,sizeof(dis));
		memset(flag,0,sizeof(flag));
		cin>>n>>m;
		if (n==0&&m==0) break;
		for (int a=0;a<n;a++) {
			for (int b=0;b<m;b++) {
				char r1;
				cin>>r1;
				if (r1=='@') mp[a][b]=1;
				if (r1=='#') mp[a][b]=2;
			}
		}
		cin>>sx>>sy>>dx>>dy;
		dis[sx][sy]=0;
		temp.x=sx;
		temp.y=sy;
		temp.dis=0;
		q.push(temp);
		while (!q.empty()) {
			int x=q.top().x,y=q.top().y;
			if (x==dx&&y==dy) {
				cout<<dis[x][y]<<endl;
				break;
			}
			q.pop();
			if (flag[x][y]) continue;
			flag[x][y]=1;
			for (int a=0;a<4;a++) {
				int nx=x+xx[a],ny=y+yy[a],cost;
				if (mp[x][y]==mp[nx][ny]) cost=0;
				else cost=1;
				if (nx>=0&&nx<n&&ny>=0&&ny<m) {
					if (dis[nx][ny]>dis[x][y]+cost) {
						dis[nx][ny]=dis[x][y]+cost;
						temp.x=nx;
						temp.y=ny;
						temp.dis=dis[nx][ny];
						q.push(temp);
					}
				}
			}
		}
	}
	return 0;
} 

手造一堆数据都是对的。。。

2022/3/2 11:24
加载中...