为啥我感觉我我写的Dijkstra算法跟别人的不一样?
  • 板块学术版
  • 楼主林志艺
  • 当前回复10
  • 已保存回复10
  • 发布时间2022/8/18 15:32
  • 上次更新2023/10/27 14:46:18
查看原帖
为啥我感觉我我写的Dijkstra算法跟别人的不一样?
549911
林志艺楼主2022/8/18 15:32

上午手搓Dijkstra算法,写出来后去研究堆优化,结果发现人家写的怎么跟我的很不一样?

代码:

#include <iostream>
#include <queue>
using namespace std;
struct pd
{
	int path,dist;
};
queue <int> q;
pd ans[1005];
int map[1005][1005],n,m,x,y,z,a,b,minmap,mini,qf,temp;
bool vis[1005];
int main()
{
	cin >> n >> m >> a >> b;
	for(int i=0;i<m;i++)
	{
		cin >> x >> y >> z;
		map[x][y]=z;
		map[y][x]=z;
	}
	for(int i=0;i<n;i++)
	{
		ans[i].path=-1;
		ans[i].dist=999999999;
	}
	ans[a].path=a;
	ans[a].dist=0;
	q.push(a);
	vis[a]=1;
	while(q.empty()==0)
	{
		qf=q.front();
		for(int i=0;i<n;i++)
		{
			temp=ans[qf].dist+map[qf][i];
			if(map[qf][i]!=0&&temp<ans[i].dist&&vis[i]==0)
			{
				ans[i].dist=temp;
				ans[i].path=qf;
			}
		}
		minmap=999999999;
		mini=-1;
		for(int i=0;i<n;i++)
		{
			if(ans[i].dist<minmap&&vis[i]==0)
			{
				minmap=ans[i].dist;
				mini=i;
			}
		}
		if(mini!=-1)
		{
			vis[mini]=1;
			q.push(mini);
		}
		q.pop();
	}
	cout << ans[b].dist;
	return 0;
}
2022/8/18 15:32
加载中...