⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abc.txt

📁 C++实现最小生成树和最短路径
💻 TXT
字号:
#include<iostream>
#include "string.h"
#include<iomanip>
using namespace std;
#define vex_num 20
#define vertex_max 20
#define maxint 2000

typedef char vextype[20];
typedef struct
{
	vextype vexs[vertex_max];
	int arcs[vertex_max][vertex_max];
	int vexnum,arcnum;
}mgraph;
int n,m;
void creat_mgraph(mgraph *g)
{
	int i,j,k;
	int w;
	cout<<"请输入顶点数和边数";
	cin>>n>>m;
	g->vexnum=n;
	g->arcnum=m;
	cout<<"请输入顶点信息";
	for(i=0;i<n;i++)
	{
		cin>>g->vexs[i];
	}
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			g->arcs[i][j]=maxint;
		cout<<"请输入两个顶点的边和权值(i,j,w)"<<endl;
		for(k=0;k<m;k++)
		{
			cin>>i>>j>>w;
			g->arcs[i][j]=w;
		}
		
	
}
void dijkstra(mgraph gn,int v0,int path[],int dist[])
{
	int i,j;int k=v0;
	int v,w,min;
	int s[vex_num];
	for(v=0;v<n;v++)
	{
		s[v]=0;
		dist[v]=gn.arcs[v0][v];
		if(dist[v]<maxint)
			path[v]=v0;
		else 
			path[v]=-1;
	}
	dist[v0]=0;
		s[v0]=1;
		for(i=1;i<n;i++)
		{
			min=maxint;
			for(w=0;w<n;w++)
			{if(!s[w]&&dist[w]<min)
				{
					k=w;
					min=dist[w];}}
					s[k]=1;
					for(j=0;j<n;j++)
						if(!s[j]&&(min+gn.arcs[k][j]<dist[j]))
						{
							dist[j]=min+gn.arcs[k][j];
							path[j]=k;
						}
				
		}
	
}
void putpath(mgraph g,int v0,int i,int p[],int d[])
{
	
	int next;
	
		if(p[i]!=-1 && i!=v0)
		{
			cout<<g.vexs[i]<<"<--";
			next=p[i];
			while(next!=v0)
			{
				cout<<g.vexs[next]<<"<--";
				next=p[next];
			}
			cout<<g.vexs[v0]<<':'<<d[i]<<"     "<<endl;
		}
		else 
			if(p[i]==-1&&i!=v0)
				cout<<g.vexs[i]<<"<--"<<g.vexs[v0]
				<<"    没有路径存在"<<endl;
}
void main()
{  
	int i;
    int v0,c;
    vextype vinfo,abc;
    int path[vex_num];
	int dist[vex_num];
    mgraph g;
    creat_mgraph(&g);

    cout<<"请输入起始点和终点 :"; 
    cin>>vinfo>>abc;
    for(i=0;i<n;i++)
	{if(strcmp(vinfo,g.vexs[i])==0)
        v0=i;
	if(strcmp(abc,g.vexs[i])==0)
        c=i;}
    dijkstra(g,v0,path,dist);
    putpath(g,v0,c,path,dist);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -