上午手搓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;
}