dijkstra算法95分求助
  • 板块P2683 小岛
  • 楼主akldjdj
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/4 23:17
  • 上次更新2024/3/5 16:39:11
查看原帖
dijkstra算法95分求助
1291531
akldjdj楼主2024/3/4 23:17
#include<bits/stdc++.h>
using namespace std;
const int inf=0x7fffff;
int dis[101],check[101];
int graph[101][101];
int n,m;
void dijkstra(int s){//输入起点 
	for(int i=1;i<=n;i++){
		dis[i]=inf;
		check[i]=0;
	}//初始化 
	dis[s]=0;
	for(int i=1;i<=n;i++){
		int minn=inf,minx;
		for(int j=1;j<=n;j++){
			if(dis[j]<minn&&check[j]==0){
				minn=dis[j];
				minx=j;
			}
		}
		check[minx]=1;
		for(int j=1;j<=n;j++){
			if(graph[minx][j]>0&&minn+graph[minx][j]<dis[j]){
				dis[j]=minn+graph[minx][j];
			}
		}
	}
}
int main(){
	int q,k=0;
	int u,v;
	int mindis[5001];
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			graph[i][j]=-1;
		}
	}
	for(int i=0;i<m;i++){
		scanf("%d",&q);
		if(q==1){
			int e;
			scanf("%d%d%d",&u,&v,&e);
			if(graph[u][v]>e||graph[u][v]==-1){
				graph[u][v]=e;
				graph[v][u]=e;
			}
		}
		else if(q==0){
			scanf("%d%d",&u,&v);
			dijkstra(u);
			if(dis[v]==inf)mindis[k++]=-1;
			else mindis[k++]=dis[v];
		}
	}
	for(int i=0;i<k;i++){
		printf("%d\n",mindis[i]);
	}
	
}
2024/3/4 23:17
加载中...