全裸dijkstra废了看不懂
查看原帖
全裸dijkstra废了看不懂
1112758
16_lln楼主2024/7/1 16:12
#include <bits/stdc++.h>
using namespace std;
int f,p,c,m,sum,d[105],vis[105],a[105][105];
int crime[105],chose[105];
void dijkstra(){
	memset(d,0x3f,sizeof(d));
	memset(vis,0,sizeof(vis));
	d[1]=0;//初始化 
	for(int i=1;i<f;i++){
		int s=0;
		for(int j=1;j<=f;j++){
			if(!vis[j]&&(s==0||d[j]<d[s])) s=j;//提取x数值 
		}
		vis[s]=1;//标记已访问数值 
		for(int g=1;g<=f;g++) d[g]=min(d[g],d[s]+a[s][g]);
	} 
} 
int main(){
	cin>>f>>p>>c>>m;
	memset(a,0x3f,sizeof(a));
	memset(crime,0,sizeof(crime));
	for(int i=1;i<=f;i++) a[i][i]=0;//自己与自己的最短路径==0 
	for(int i=1;i<=p;i++){
		int f1,f2,t;
		cin>>f1>>f2>>t;
		a[f1][f2]=min(a[f1][f2],t);//判断重复边不同权值 
	}
	dijkstra();//函数 
	for(int i=1;i<=f;i++){
		if(d[i]<=m){
			sum++;
			crime[i]=d[i];
		}
	} 
	cout<<sum;
	for(int i=1;i<=sum;i++) chose[crime[i]]++;
	for(int i=1;i<=m;i++) while(chose[i]>0) cout<<crime[i]<<endl;//输出嫌疑犯编号 
	return 0;
} 
2024/7/1 16:12
加载中...