我的单源最短路径算法有没有问题
  • 板块学术版
  • 楼主minecraft666
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/18 17:22
  • 上次更新2023/11/3 09:04:49
查看原帖
我的单源最短路径算法有没有问题
445694
minecraft666楼主2023/7/18 17:22

关于提问

哪位神犇能帮我看看这个婴儿版带提示(有中文输出,便于查看各数据变化)的Dijkstra单源最短路径算法有没有什么问题

思路来源于《信息学奥赛一本通》c++第五版P476~478

本蒟蒻第一次整这么高级的活不喜勿喷(求)

各种变量的含义

dis[ ]存着从起点到下标节点最短距离

pre[ ]存着下标节点的前驱

w[ ][ ]存着从一个节点到另一个节点的距离

vis[ ]存着该下标节点有没有被访问

start存着起始节点

end存着结束(目标)节点

u,v输入距离用的

mi循环找与起点距离最小的节点与起点的距离

nodenum节点数量

way存储最短路径

p,wa辅助存储最短路径

以下是程序

#include <bits/stdc++.h>
using namespace std;
int dis[1000],pre[1000],w[1000][1000]={-1},n,u,v,start,end,mi=1000000,nodenum=-1,way[1000],p,wa=1;
bool vis[1000];
void Dijkstra()
{
	dis[start]=0;
	pre[start]=0;
	//vis[start]=1;
	for(int i=1;i<=nodenum;i++)
	{
		if(i==end)return;
		mi=1000000;
		for(int j=1;j<=nodenum;j++)
			if(dis[j]<mi&&vis[j]==0)
				mi=j;
		cout<<"以节点"<<i<<"为起始点"<<endl;
		for(int j=1;j<=nodenum;j++)
		{
			if(w[mi][j]!=0&&vis[j]!=0)	
			{
				dis[j]=dis[mi]+w[mi][j];
				vis[j]=1;
				cout<<"  修改:"<<j<<"的前驱原为"<<pre[j]<<",现改为"<<mi<<endl;
				pre[j]=mi;
			}
			if(dis[i]+w[i][j]<dis[j]&&w[i][j]!=0)
			{
				cout<<"  修改:起点到"<<j<<"的距离原为"<<dis[j]<<",现改为"<<dis[i]+w[i][j]<<endl;
				dis[j]=dis[i]+w[i][j];
				vis[j]=1;
				cout<<"  修改:"<<j<<"的前驱原为"<<pre[j]<<",现改为"<<i<<endl;
				pre[j]=i;
			}
		}
		cout<<"  节点"<<i<<"的前驱为"<<pre[i]<<endl;
	}
}
int main()
{
	cout<<"输入边数量:";
	cin>>n;
	for(int i=1; i<=n; i++)
		dis[i]=0x7fffffff,vis[i]=0;
	cout<<"输入节点到节点的距离"<<endl<<"格式:节点1 节点2 距离"<<endl;
	for(int i=1;i<=n;i++)
	{
		cin>>u>>v;
		if(u>nodenum)nodenum=u;
		if(v>nodenum)nodenum=v;
		cin>>w[u][v];
	}
	cout<<"起点:";
	cin>>start;
	cout<<"终点:";
	cin>>end;
	cout<<"--------------以下为运算过程--------------"<<endl;
	Dijkstra();
	way[1]=p=end;
	while(pre[p]!=0)
	{
		way[wa]=pre[p];
		p=pre[p];
		wa++;
	}
	cout<<endl<<endl<<"----------------以下为答案----------------"<<endl;
	cout<<"以"<<start<<"为起点,"<<end<<"为终点的单源最短路径中"<<endl<<"  路径:";
	for(int i=wa-1;i>=1;i--)cout<<way[i]<<"-";
	cout<<end<<endl<<"  距离:"<<dis[end];
	return 0;
}

帮我检查检查,万分感谢!

2023/7/18 17:22
加载中...