最短路径-邻接矩阵

最短路径

思路:先记录1到所有点的距离(没有连线记为无穷大)为到达该点的最短路径长,然后从1开始利用贪心思想依次找出到下一个连接点的最短距离,然后再找以该点为基准的下一个距离最近的点,判断从1先到一个点再到该点的距离与从1直接到该点距离的大小,若小,则更新dis[]距离长,否则不更新

若不理解,建议看看简单易懂——Dijkstra算法讲解

#include
#define max 110
#define inf 99999999
int a[max][max],dis[max],vis[max];
int m,n,from,to,val,i,j,w,min;
void Dijkstra()
{
	
		for(i=1;i<=n;i++)//创建一个二维矩阵,存储各边路径权信息 
	{
		for(j=1;j<=n;j++)
		{
			if(i==j)a[i][j]=0;//初始化各点间的权值均为无穷大,除了自身到自身的点 
			else a[i][j]=inf;
		}
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&from,&to,&val);
		a[from][to]=val;//对矩阵边信息进行初始化 
	}
	for(i=1;i<=n;i++)
	{
		dis[i]=a[1][i];//储存第1~第i个点间的距离 
	}
	for(i=1;i<=n;i++)
	{
		vis[i]=0;// 记录第i个点是否被访问过 
	}
	vis[1]=1;//设置第一个点已访问 
	for(i=1;i<=n-1;i++)
	{
		min=inf;
		for(j=1;j<=n;j++)//寻找下一个未被访问的点且权值最小 
		{
			if(vis[j]==0&&dis[j]

你可能感兴趣的:(图)