• HDU


    Descriptions:

    一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。

    Input

    前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<=20,m>=1.m=0退出.
    Output

    输出从第m个城市出发经过每个城市1次又回到m的所有路线,如有多条路线,按字典序输出,每行1条路线.每行首先输出是第几条路线.然后个一个: 后列出经过的城市.参看Sample output

    注意格式:PA了一发,发现是少了加了一个空格

    #include<bits/stdc++.h>
    using namespace std;
    int g[25][5];//世界城市
    int path[25];//答案数组
    bool book[25];//标记是否使用过
    int total;//有几种环游的个数
    int m;
    void dfs(int x,int sum) {//第几个城市,总共环游了几个城市
        for (int i = 0; i < 3; ++i) {
            //全部走完,并且下一个是起始城市
            if (sum == 19 && g[x][i] == m) {
                cout << total++ << ":  ";//输出格式
                for (int i = 0; i < 20; ++i)
                    cout << path[i] << " ";
                cout << m << endl;
                return;
            }
            if (!book[g[x][i]]) {
                book[g[x][i]] = 1;
                path[sum + 1] = g[x][i];
                dfs(g[x][i], sum + 1);
                book[g[x][i]] = 0;
            }
        }
    }
    int main() {
        //freopen("in.txt", "r", stdin);
        int t[3];
        for (int i = 1; i <= 20; ++i) {
            cin >> t[0] >> t[1] >> t[2];
            //因为是按照字典顺序,所以这里先处理一下,从小到大排
            sort(t, t + 3);
            g[i][0] = t[0], g[i][1] = t[1], g[i][2] = t[2];
        }
        while (cin >> m && m) {
            total = 1;//环游世界的方案
            memset(book, false, sizeof book);
            book[m] = true;
            path[0] = m;//存入路径数组
            dfs(m, 0);
        }
        return 0;
    }
    

    收获:想要按照字典序排序时,可以在输入的时候就预排序,这样就可以直接用了

  • 相关阅读:
    ubuntu11.04解决root不能登录的问题
    应用C预处理命令
    WINCE6.0在控制面板添加控制面板应用程序
    嵌入式系统开发
    WINCE6.0下开始菜单的“挂起(suspend)”是否可见及阻止系统进入睡眠模式
    WINCE6.0更换桌面壁纸和图标
    ubuntun_11.04安装
    WINCE开发更安全可靠设备驱动的最佳实践
    WINCE源代码配置文件
    TS2003基于触摸屏的应用
  • 原文地址:https://www.cnblogs.com/RioTian/p/13099446.html
Copyright © 2020-2023  润新知