下了#1的看了看,完全一致
找个神仙帮忙看一下
//2023/5/4
//别着急,先通读一遍题目
//别忘了开long long
//写完先看一遍怎么降复杂度
//要么开全局变量要么给定初值
//想想看,有什么情况需要特判
//std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
const int INF=0x3f3f3f3f;
int num,ans;
int n,m,t;
bool vis[1010];
int dis[1010],p=1,a[1010][1010],arr[1010];
string s;
void Dijkstra()
{
for (int i=1;i<=n;i++)
{
dis[i]=a[1][i];
}
dis[1]=0;
vis[1]=1;
for (int i=1;i<=n-1;i++)
{
int temp=INF;
for (int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<temp)
{
temp=dis[j];
t=j;
}
}
if(temp>=INF)
{
return;
}
vis[t]=true;
for (int j=1;j<=n;j++)
{
if(dis[j]>dis[t]+a[t][j])
{
dis[j]=dis[t]+a[t][j];
}
}
}
}
int main()
{
cin>>m>>n;
memset(dis,0x3f,sizeof(dis));
memset(a,0x3f,sizeof(a));
getline(cin,s);
for (int i=1;i<=m;i++)
{
getline(cin,s);
int x=0;
for (int j=0;j<s.length();j++)
{
if(s[j]==' ')
{
arr[p++]=x;
x=0;
}
else
{
x=x*10+s[j]-'0';
}
}
arr[p]=x;
/*for (int i=1;i<=p;i++)
{
cout<<arr[i]<<endl;
}*/
for (int i1=1;i1<=p;i1++)
{
for (int j1=i1+1;j1<=p;j1++)
{
a[arr[i1]][arr[j1]]=1;
}
}
p=1;
}
Dijkstra();
if(dis[n]>=INF) cout<<"NO"<<endl;
else cout<<dis[n]-1<<endl;
return 0;
}