数据结构:图的最短路径(C++代码实现)

#include <iostream>
using namespace std;
const int max=9999;
void minpath(int v,int n,int d[100],int pre[100],int c[100][100])
{
   int s[100];
   for(int i=1;i<=n;i++)
   {
	   d[i]=c[v][i];s[i]=0;
       if(d[i]==max)pre[i]=0;
       else 
		   pre[i]=v;
   }
d[v]=0;
s[v]=1;
   for(int k=2;k<=n;k++)
   {
	int temp=max;
    int t=v;
    int j;
      for(j=1;j<=n;j++)
	  {
	    if((s[j]==0)&&d[j]<temp)
		{
		t=j;temp=d[j];
		}
	  }
     s[t]=1;
     for(j=1;j<=n;j++)
	 {
	    if((s[j]==0)&&c[t][j]<max)
		{
		int newd=d[t]+c[t][j];
        if(newd<d[j])
		{
			pre[j]=t;d[j]=newd;
		}
		}
	 }
   }
}
void searchpath(int pre[100],int v,int u)
{
  int q[100];int p;
  q[1]=u;p++;
  int temp=pre[u];
  for(p=2;temp!=v;p++)
  {
	  q[p]=temp;temp=pre[temp];
  }
  q[p]=v;
  for(int i=p;i>1;i--)
  {
	  cout<<q[i]<<"->";
  }
  cout<<q[1];
  cout<<endl;
}
int main()
{
int d[100],pre[100];
int c[100][100];
int i,j,p,q,length,n,m,v;
cout<<"请输入顶点个数:";
cin>>n;
cout<<"请输入路径个数:";
cin>>m;
for(i=1;i<=n;i++)
{
	for(j=1;j<=n;j++)c[i][j]=max;
}
cout<<"请依次输入路径始点、终点、距离:"<<endl;
cout<<"p"<<'\t'<<"q"<<'\t'<<"length"<<endl;
for(i=1;i<=m;i++)
{
	cin>>p>>q>>length;c[p][q]=length;
}
cout<<"请输入要查找最短路径的终点:";
cin>>v;
minpath(1,n,d,pre,c);
cout<<"从源点到"<<v<<"的最短路径长度为:"<<d[v]<<endl;
cout<<"其路径为:";
searchpath(pre,1,v);
return 0;
}

在这里插入图片描述

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值