DFS 专题 哈密顿绕行世界问题

注意:标号后面是两个空格。

# include <cstdio>

# include <cstring>

# include <algorithm>



using namespace std;



int n, m, adj[21][3];

bool vis[21];

int solu[22];



void dfs(int cur, int cnt)

{

    int t;

    for (int i = 0; i < 3; ++i)

    {

        t = adj[cur][i];

        if (cnt == 20 && t == m)

        {

            printf("%d:  %d", ++n, m);

            for (int i = 2; i <= 21; ++i)

                printf(" %d", solu[i]);

            putchar('\n');

            return ;

        }

        else if (vis[t] == false)

        {

            vis[t] = true;

            solu[cnt+1] = t, dfs(t, cnt+1);

            vis[t] = false;

        }

    }

}



void init(void)

{

    int x, y ,z;



    for (int i = 1; i < 21; ++i)

    {

        scanf("%d%d%d", &x, &y, &z);

        adj[i][0] = min(x, min(y, z));

        adj[i][2] = max(x, max(y, z));

        adj[i][1] = x+y+z - adj[i][0] - adj[i][2];

    }

}



void solve(void)

{

    while (scanf("%d", &m), m)

    {

        memset(vis, false, sizeof(vis));

        n = 0, solu[1] = solu[21] = m;

        vis[m] = true;

        dfs(m, 1);

        vis[m] = false;

    }

}



int main()

{

    init();

    solve();



    return 0;

}

/**/

你可能感兴趣的:(DFS)