hdu2181 하미턴 세계문제 우회 - 검색

1418 단어
나는 내가 쓴 첫 번째 문제인데, 이 문제는 깊이 검색하면 된다.출력된 공백 수를 주의하십시오.
#include <iostream>
#include<cstring>
#include<stdio.h>
#include<algorithm>
using namespace std;
int visit[25];
int start;
int way;
int route[25];
int a[25][3];
int n;
void dfs(int ci,int step)
{
    route[step]=ci;
    if(step==19&&(a[ci][0]==start||a[ci][1]==start||a[ci][2]==start))
    {
        printf("%d:  ",++way);
        for(int j=0; j<20; j++)
            printf("%d ",route[j]);
        printf("%d
",start); return; } for(int k=0; k<3; k++) { if(visit[a[ci][k]]==0) { visit[a[ci][k]]=1; dfs(a[ci][k],step+1); visit[a[ci][k]]=0; } } } int main() { way=0; for(int i=1; i<=20; i++) { scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]); sort(a[i],a[i]+3); } while(scanf("%d",&start)) { if(start==0)break; memset(visit,0,sizeof(visit)); route[0]=start; visit[start]=1; for(int i=0; i<3; i++) { n=1; if(visit[a[start][i]]==0) { int step=1; visit[a[start][i]]=1; dfs(a[start][i],step); visit[a[start][i]]=0; } } } return 0; }

좋은 웹페이지 즐겨찾기