首页 > 其他 > 详细

CCF 201512-4 送货(错误)

时间:2016-12-10 15:53:28      阅读:281      评论:0      收藏:0      [点我收藏+]

直接用DFS深搜,检查了好久没能发现错误,贴上来以后慢慢看。。。

/*
DFS深度优先搜索
Edge保存边  u{v,been}
cnt记录走过的街道
如果没有就return ;继续递归
*/
#include<vector>
#include<algorithm>
#include<iostream>
#include<cstdio>
#define MAXN 10001
using namespace std;
struct Edge
{
    int v;
    Edge(int _v=0):v(_v){}
};
vector<Edge> E[MAXN];
inline void addedge(int u,int v)
{
    E[u].push_back(Edge(v));
}
int n,m,k=0;
int cnt = 0;//记录走过的边的个数
int route[MAXN];
bool been[MAXN][MAXN];
bool f = false;
void print()
{
    for(int i=0;i<k;i++)
    {
        if(i) cout<< ;
        cout<<route[i];
    }
    //cout<<endl;
}
void dfs(int i)
{
    if(f)
        return ;
    if(cnt==m)
    {
        f = true;
        route[k++]= i;
        print();
        return ;
    }
    if(!E[i].size())
        return ;
    for(int j=0;j<E[i].size();j++)
    {
        int v=E[i][j].v;
        if(!been[i][v])
        {
            route[k++] = i;//记录路径
            been[i][v]=been[v][i]=true;//标记
            cnt++;//走过数量+1
            dfs(v);
            cnt--;
            been[i][v]=been[v][i]=false;
            k--;
        }
    }
}
int main()
{
    int x,y;
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&x,&y);
        addedge(x,y);
        addedge(y,x);
    }
    dfs(1);
    if(!f)
        cout<<-1<<endl;
    return 0;
}

 

CCF 201512-4 送货(错误)

原文:http://www.cnblogs.com/joeylee97/p/6155674.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!