C++40分求助!!!玄关
查看原帖
C++40分求助!!!玄关
1048193
PengDave楼主2024/1/3 13:58

链式前向星+dijkstra 40pts

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=2147483647;
long long dis[10010];
bool book[10010];
int n,m,s;
struct node{
    long long v;
    int to;
    int nxt;
}b[10010];
int head[10010],cnt=0;
void add(int x,int y,long long t){
    cnt++;
    b[cnt].to=y;
    b[cnt].nxt=head[x];
    b[cnt].v=t;
    head[x]=cnt;
    return;
}
int main(){
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int p,q,t;
		cin>>p>>q>>t;
		add(p,q,t);
	}
	for(int i=1;i<=n;i++){
	    dis[i]=inf;
	}
// 	for(int i=head[s];i!=0;i=b[i].nxt){
// 	    dis[b[i].to]=b[i].v;
// 	}
	dis[s]=0;
	int u=s;
	while(!book[u]){
	    book[u]=1;
		for(int j=head[u];j!=0;j=b[j].nxt){
		    if(!book[b[j].to]&&dis[b[j].to]){
		        dis[b[j].to]=min(dis[u]+b[j].v,dis[b[j].to]);
		    }
		}
		long long minn=inf;
		for(int j=1;j<=n;j++){
			if(!book[j]&&dis[j]<minn){
				minn=dis[j];
				u=j;
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
}
2024/1/3 13:58
加载中...