首页 > 代码库 > CCF 201512-4 送货(错误)
CCF 201512-4 送货(错误)
直接用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 送货(错误)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。