zoukankan      html  css  js  c++  java
  • 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;
    }
    

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

  • 相关阅读:
    各种排序算法的时间复杂度和空间复杂度
    fork/join框架
    全文检索之solr学习
    【设计模式最终总结】概述、分类、原则
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(75)-微信公众平台开发-用户管理
    下拉列表自己封装的
    下拉列表
    一个原生的JavaScript拖动方法
    JavaScript的jsonp
    angular2 的依赖注入
  • 原文地址:https://www.cnblogs.com/RioTian/p/13099446.html
Copyright © 2011-2022 走看看