P3905 请问此代码为什么会输出-1
  • 板块题目总版
  • 楼主代码小明
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/6/18 21:22
  • 上次更新2023/11/4 21:45:05
查看原帖
P3905 请问此代码为什么会输出-1
323785
代码小明楼主2021/6/18 21:22

P3905

请问此代码为什么会输出-1

Dijkstra

#include<bits/stdc++.h>
#define MAXN 100001
using namespace std;

struct City{
	int town;
	int way;
	int way2;
};
int n,m,d;
vector<City> city[100001];
int s,e;
int dst[MAXN];  //距离数组
bool vis[MAXN]; //访问数组
int main(){
	cin>>n;
	cin>>m;
	for(int i=0;i<m;i++){
		City cnt1,cnt2;
		int a,b,c;
		cin>>a>>b>>c;
		cnt1.town=b;cnt1.way=0;cnt1.way2=c;
		cnt2.town=a;cnt2.way=0;cnt2.way2=c;
		city[a].push_back(cnt1);
		city[b].push_back(cnt2);
	}
	cin>>d;
	for(int i=0;i<d;i++){
		int a,b;
		cin>>a>>b;
		for(int i=0;i<city[a].size();i++){
			if(city[a][i].town==b){
				city[a][i].way=city[a][i].way2;
				cout<<city[a][i].way<<endl;
			}
		}for(int i=0;i<city[b].size();i++){
			if(city[b][i].town==a){
				city[b][i].way=city[b][i].way2;
				cout<<city[b][i].way<<endl;
			}
		}
	}
	cin>>s>>e;
	memset(dst,2147483647,sizeof(dst));
	for(int i=0;i<city[s].size();i++){
		dst[city[s][i].town]=city[s][i].way;
	}
	vis[s]=1;
	for(int k=1;k<=n-1;k++){
		int minnode,minn=2147483647;
		for(int i=1;i<=n;i++){
			if(!vis[i]&&minn>dst[i]){
				minn=dst[i];
				minnode=i;
			}
		}
		vis[minnode]=1;
		for(int i=0;i<city[minnode].size();i++){
			int t=city[minnode][i].town;
			if(!vis[i]&&dst[t]>dst[minnode]+city[minnode][i].way){
				dst[t]=dst[minnode]+city[minnode][i].way;
			}
		}
	}
	cout<<dst[e];
	return 0;
}


2021/6/18 21:22
加载中...