省赛结束后,我整个人都不好了
第五题题目描述(大概):有n个景区,m条路,每条路连接两个景区,一次输出从每一个景区(除了第n个)到第n个景区最少需要经过多少条路
输入样例:
5 5
1 2
1 3
2 5
3 5
2 4
输出样例:
2 1 1 2
---------------------------------------------------------------------------------------------------------------------------------
因为我不聪明所以我用了一个递归解决这道题
#include<bits/stdc++.h>
using namespace std;
int a[220][3],minn;
int m,n;
void dfs(int now,int t,int last,int m1) //now:现在的位置,t:已经走过的路的数量 last:上一次移动前所在的位置 m1:需要到达的重点(其实不需要,因为只有一个终点)
{
if(now==m1)
{
minn=min(minn,t); //检查是否找到了路
return;
}
if(t>50) //如果走了五十步以上,说明没路了
return;
for(int i=1;i<=m;i++)
{
if(a[i][1]==now && a[i][2]!=last) //避免走回头路
{
dfs(a[i][2],t+1,now,m1);
}
if(a[i][2]==now && a[i][1]!=last) //避免走回头路
{
dfs(a[i][1],t+1,now,m1);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i][1]>>a[i][2]; //输入路线
}
for(int i=1;i<=n-1;i++)
{
minn=2e9; //最小值计数器
dfs(i,0,0,n);
if(minn==2e9) //如果没有找到道路,输出-1
cout<<-1;
else
cout<<minn<<" ";
}
return 0;
}
谢谢观赏