找出错误者无条件互关
查看原帖
找出错误者无条件互关
315398
小杨小小杨楼主2021/8/11 15:53

Code:

#include<bits/stdc++.h>
using namespace std;
const int inf=2147483647;
const int maxn=510,maxm=5100;
int n,m,i,j,x,mp[maxn],f[maxn][maxn];
bool In_queue[maxn];
queue<int> p;
void init(int i){
	char s[10001]={""};
	int sum=0,l=0,c[10001]={0};
	getchar();getchar();gets(s);
	s[strlen(s)]=' ';
	for (int i=0;i<strlen(s);i++)
		if (s[i]==' ') c[++l]=sum,sum=0;
		else sum=sum*10+s[i]-48;
	for (int i=1;i<=l;i++)
		for (int j=i;j<=l;j++)
			f[c[i]][c[j]]=f[c[j]][c[i]]=1;
}
int main(){
	scanf("%d%d",&m,&n);
	for (i=1;i<=n;i++)
		for (j=1;j<=n;j++)
			f[i][j]=inf;
	for (i=1;i<=m;i++) init(i);
 	for (i=0;i<=n;i++) mp[i]=inf; 
	p.push(1);In_queue[1]=1;mp[1]=0;
	while (!p.empty()){
		x=p.front();p.pop();In_queue[x]=0;
		for (i=1;i<=n;i++)
			if (f[x][i]!=inf&&mp[i]>mp[x]+f[x][i]&&x!=i){
				mp[i]=mp[x]+f[x][i];
				if (!In_queue[i]){
					In_queue[i]=1;
					p.push(i);
				}
			}
	}
	if (mp[n]==inf) printf("-1");
	else printf("%d\n",mp[n]);
	return 0;
}

SPFA都不会打了,我退役吧…… 找出错误者无条件互关。

2021/8/11 15:53
加载中...