dijkstra80分求助
查看原帖
dijkstra80分求助
1270559
zkhehe楼主2024/4/3 23:55
#include <cstdio>
#define N 6210
using namespace std;
int n,m,s,t;
int v[N],w[N],fir[N],nxt[N],cnt=1;
int dis[N],vis[N];
void add(int x,int y,int z){
	nxt[cnt]=fir[x];
	fir[x]=cnt;
	v[cnt]=y;
	w[cnt]=z;
	cnt++;
}
int main(){
	scanf("%d%d%d%d",&n,&m,&s,&t);
	for(int i=0;i<N;i++){
		fir[i]=-1;
		dis[i]=0x7fffffff;
	}
	dis[s]=0;
	for(int i=1;i<=m;i++){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
		add(y,x,z);
	}
	for(int i=1;i<=n;i++){
		int mmin=0x7fffffff,k=-1;
		for(int j=1;j<=n;j++){
			if(dis[j]<mmin&&vis[j]==0){
				mmin=dis[j];
				k=j;
			}
		}
		if(k==-1)break;
		vis[k]=1;
		for(int j=fir[k];j!=-1;j=nxt[j]){
			if(vis[v[j]]==0&&dis[v[j]]>dis[k]+w[j]){
				dis[v[j]]=dis[k]+w[j];
			}
		}
	}
	printf("%d",dis[t]);
	return 0;
}
2024/4/3 23:55
加载中...