0
点赞
收藏
分享

微信扫一扫

C++蓝桥杯第十三届省赛4月23日第5题题解

星巢文化 2022-04-23 阅读 49
c++蓝桥杯

省赛结束后,我整个人都不好了

第五题题目描述(大概):有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;
}

谢谢观赏

举报

相关推荐

0 条评论