zoukankan      html  css  js  c++  java
  • 哈密顿绕行世界问题 HDU2181

    题目大意都比较简单,用vector存一下图,然后爆搜就可以了。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e3+7;
    vector<int >ve[100];
    bool mark[N];
    int path[N];
    string s[N];
    int pos=0;
    int m;
    void dfs(int x,int time){
        mark[x]=1;
        path[time]=x;
        if(time==20){
            string s1="";
            for(int i=0;i<ve[x].size();i++) if(ve[x][i]==m){
                for(int j=1;j<=time;j++){
                    s1+=path[j];
                }
                s[pos++]=s1;
                break;
            }
    
            mark[x]=0;
            return ;
        }
        for(int i=0;i<ve[x].size();i++){
            if(mark[ve[x][i]]) continue ;
            dfs(ve[x][i],time+1);
        }
        mark[x]=0;
    }
    int main(){
        for(int i=1;i<=20;i++){
            int x,y,z;
            cin>>x>>y>>z;
            ve[i].push_back(x);
            ve[i].push_back(y);
            ve[i].push_back(z);
        }
    
        while(cin>>m,m){
            dfs(m,1);
            sort(s,s+pos);
            for(int i=1;i<=pos;i++){
                cout<<i<<":  ";
                for(int j=0;j<20;j++){
                    cout<<(int)s[i-1][j]<<" ";
                }
                cout<<m<<endl;
            }
        }
        return 0;
    }

    (反思:以前写关于DFS题的时候,标记回溯那一块老是出错,现在清楚了一点,以前总是喜欢这样标记:,这样是不对的,因为还没到time+1这一层呢,就已经给他标记好了......应该把标记放在开头和结尾,意思是当进入这一层时,就给他标记上,当马上要离开这一层了,把标记去掉。QWQ)

  • 相关阅读:
    jquery两个滚动条样式
    js双层动画幻灯
    漂浮QQ
    js物理弹性窗口
    js抽奖跑马灯程序
    经典算法
    判断手机浏览器终端设备
    javascript判断手机旋转横屏竖屏
    【转】处理百万级以上的数据提高查询速度的方法
    Linux -- Centos 下配置LNAMP 服务器环境
  • 原文地址:https://www.cnblogs.com/Accepting/p/12698764.html
Copyright © 2011-2022 走看看