//最短路径 Dijkstra算法
#include<iostream>
using namespace std;
int n; //节点数目
int dist[102]; //到节点1的最短路径值
bool vis[102]; //节点被搜索过状态指示
int map[102][102]; //邻接矩阵
//查找权值最小的节点
int findmin()
{
int minnode=0, min=INT_MAX;
for(int i=1; i<=n; i++)
if ((dist[i]<min) && (!vis[i]))
{
min=dist[i];
minnode=i;
}
return minnode;
}
int main()
{
memset(vis, 0, sizeof(vis));
scanf("%d",&n);
for(int p=1; p<=n; p++)
for(int q=1; q<=n; q++)
{
scanf("%d",&map[p][q]);
if (map[p][q]==0)
map[p][q]=INT_MAX;
}
//初始化
for(int i=1; i<=n; i++)
dist[i]=map[1][i];
vis[1]=true;
int done=1;
while (done<n)
{
int node=findmin();
if (node!=0)
{
done++; //找到的点的数目加1
vis[node]=true; //标记已经找到了从节点1到节点node的最短路径
for(int i=1; i<=n; i++)
//更新还没有找到的点的路径值
if ((dist[i]>dist[node]+map[node][i]) && (!vis[i]))
dist[i]=dist[node]+map[node][i];
}
else break;
}
printf("%d\n",dist[n]);
return 0;
}
最短路径 Dijkstra算法
最新推荐文章于 2021-12-23 22:08:48 发布