#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=510,INF=1e18;
struct Node{
ll pos,dst;
bool operator < (const Node &a) const{
return a.dst<dst;
}
};
ll m,n,ans[N];
bool vst[N];
vector<Node> to[N];
priority_queue<Node> q;
void Dijkstra()
{
q.push((Node){1,0});
while(!q.empty())
{
Node now=q.top();
q.pop();
if(vst[now.pos]) continue;
vst[now.pos]=1;
for(ll i=0;i<to[now.pos].size();i++)
{
ll nxt=to[now.pos][i].pos,cost=to[now.pos][i].dst+now.dst;
if(cost<ans[nxt])
{
ans[nxt]=cost;
q.push((Node){nxt,cost});
}
}
}
}
int main()
{
scanf("%lld%lld",&m,&n);
for(ll i=1;i<=n;i++) ans[i]=INF;
ans[1]=0;
string s;
getline(cin,s);//过滤第一个回车
for(ll i=1;i<=m;i++)
{
vector<ll> line;//不可以在全局定义 line然后用 clear,因为 clear不回收空间
getline(cin,s);
ll now=0;
for(ll i=0;i<s.size();i++)
{
if(s[i]==' ')
{
line.push_back(now);
now=0;
}
else now=now*10+(s[i]-'0');
}
line.push_back(now);
for(ll j=0;j<line.size()-1;j++)
for(ll k=j+1;k<line.size();k++)
to[line[j]].push_back((Node){line[k],1});
}
Dijkstra();
if(ans[n]==INF) printf("NO");
else printf("%lld",ans[n]-1);
return 0;
}
这个代码我在本地测数据1答案是2,但是到评测机上测数据1出来的答案就变成NO了,不知道为什么,各位大佬帮忙看看呗QAQ
附上数据1:
Input:
4
15
2 11
1 3 4 5 9
3 6 11
2 7 8 10 11 12 13 15
Standard Output:
2