HDU2181哈密顿绕行世界问题(DFS)

题目:传送门
分析:从一个出发有三个选择不断遍历至回到原点,记录路径。。。。看了很多题解,就直接写还是不知道为什么它自己就按字典排序了(尴尬)
AC代码:

#include<iostream>
#include<cstring>
using namespace std;
int map[21][3];
bool vis[22];			//标记有没有走过
int ans[22];
int m,time;
void dfs(int step,int num){
	ans[num]=step;
	for(int i=0;i<3;i++){				//遍历一个城市接下来的三种情况
		if(map[step][i]==m&&num==19){
			cout<<time<<":  ";
			time++;
			for(int j=0;j<=19;j++)
			cout<<ans[j]<<" ";
			cout<<m<<endl;
		}
		int t=map[step][i];
		if(!vis[t]){
			vis[t]=true;
			dfs(t,num+1);
			vis[t]=false;
		}
	}
}
int main(){
	for(int i=1;i<=20;i++){
		scanf("%d %d %d",&map[i][0],&map[i][1],&map[i][2]);
	}
	while(cin>>m&&m){
		time=1;
		memset(vis,false,sizeof(vis));
		memset(ans,0,sizeof(ans));
		vis[m]=true;
		dfs(m,0);
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43556295/article/details/86660910
今日推荐