题目:
http://acm.hdu.edu.cn/showproblem.php?pid=2181题意:
TSP问题,20个城市,每个城市与三个城市相连,输出从某个城市开始遍历所有城市的所有路径的字典序排列。思路:
按字典序暴力dfs即可,代码:
#define N 25
int n,m;
int flag,sum,ave,ans,len,ans1,ans2;
int g[N][3],res[N];
bool vis[N];
void dfs(int num,int now)
{
if(num==20)
{
res[20]=n;
printf("%d: ",++sum);
for(int i=0;i<=20;i++)
printf(" %d",res[i]);
printf("\n");
return ;
}
for(int i=0;i<3;i++)
{
if(!vis[g[now][i]])
{
vis[g[now][i]]=true;
res[num+1]=g[now][i];
dfs(num+1,g[now][i]);
vis[g[now][i]]=false;
}
if(num==19&&g[now][i]==n)
dfs(num+1,n);
}
}
int main()
{
int i,j,k,kk,t,x,y,z;
memset(g,0,sizeof(g));
for(i=1;i<=20;i++)
{
scanf("%d%d%d",&x,&y,&z);
g[i][0]=x;g[i][1]=y;g[i][2]=z;
sort(g[i],g[i]+3);
}
while(scanf("%d",&n)&&n)
{
sum=0;res[0]=n;
memset(vis,false,sizeof(vis));
vis[n]=true;
dfs(0,n);
}
return 0;
}