为什么我的dijkstra无输出?
  • 板块学术版
  • 楼主hjqhs
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/1/21 11:36
  • 上次更新2023/10/24 03:26:37
查看原帖
为什么我的dijkstra无输出?
724988
hjqhs楼主2023/1/21 11:36
#include<bits/stdc++.h>
using namespace std;
int dis[59],w[59][59],pre[59];
//dis[u]代表从节点0(即起点)到u最短路径长度
//w[u][v]表示连接u,v边的长度 不相连即为0 
//pre[u]代表最短路径中节点u前面的节点
bool isyou[59];
//isyou[i]表示是否为最有路径中的节点 
struct node{
	int value;
	int pos;
};
int main(){
	int m;cin>>m;//m表示有多少个点 
	int n;cin>>n;//n表示有多少条边 
	int ed;cin>>ed;//ed为终点
	for(int i=1;i<=n;i++){ 
		int a,b,c;
		cin>>a>>b>>c;
		w[a][b]=c;
		w[b][a]=c;
	}
	for(int i=0;i<m;i++){
		dis[i]=10000;
		pre[i]=-1;
	} 
	dis[0]=0;
	for(int i=0;i<m;i++){
		node min;
		min.value=9999;
		min.pos=-1;
		int j;
		for(j=0;j<m;j++)
			if(dis[j]<min.value){
				min.value=dis[j];
				min.pos=j;
			}
		isyou[j]=1;
		for(int p=1;p<m;j++){
			if(w[p][j]!=0&&w[j][p]!=0&&isyou[p]!=1){
				int tmp=dis[j]+w[j][p];
				if(tmp<dis[p]){
					dis[p]=tmp;
					pre[p]=j ;
				}
			}
		}
	}
	cout<<dis[ed];
	return 0;
}
/*
测试数据
9 14 4
0 1 4
0 7 8
1 7 11
1 2 8
6 7 1
7 8 7
2 8 2
8 6 6
2 3 7
2 5 4
6 5 2
3 5 14
3 4 9
5 4 10 
*/
2023/1/21 11:36
加载中...