数组也没有开小,为什么提交都是运行错误,下载数据也能得到正确答案
查看原帖
数组也没有开小,为什么提交都是运行错误,下载数据也能得到正确答案
202977
张老师nlfb楼主2022/11/23 17:29
#include<bits/stdc++.h>
using namespace std;
const int N=505;
int m,n,a[N][N],t[505],dis[N],f[N],x;
char s;
void dijkstra(int x){
	memset(dis,0x3f,sizeof dis);
	dis[x]=0;
	for(int i=1;i<=n;i++){
		int minn=1e9,u=0;
		for(int j=1;j<=n;j++){	//找出最近的u; 
			if(!f[j]&&minn>dis[j]){
				minn=dis[j];
				u=j;
			}
		}
		if(u==0)	break;
		f[u]=1;
		for(int j=1;j<=n;j++){	//找出u相连的点 
			if(!f[j]&&dis[j]>dis[u]+a[u][j]){
				dis[j]=dis[u]+a[u][j];
			} 
		}
	}
}
int main(){
	scanf("%d%d\n",&m,&n);
	memset(a,0x3f,sizeof a);
	while(m--){
		int k=0;
		memset(t,0,sizeof t);
		s=' ';
		while(s!='\n'){
			scanf("%d%c",&x,&s);
			t[++k]=x;
		}
		for(int i=1;i<=k;i++)		//同一线路上的权值为1,注意先后 
			for(int j=i+1;j<=k;j++){
				a[t[i]][t[j]]=1;
			}
	}
	dijkstra(1);
	if(dis[n]==0x3f3f3f3f)	cout<<"No";
	else cout<<dis[n]-1;		
	return 0;
}

2022/11/23 17:29
加载中...