【CCF 送货 waing】
2016-12-10 21:45
211 查看
不懂为什么错,没用欧拉图相关的算法,纯DFS搜我觉得也很对………………
先预处理输入的路径,然后搜索的时候就直接是从小的顶点开始搜的,碰到路径对了的,就直接输出返回就是了
马一发,有生之年是否能解…………
仔细看了下错误的情况,发现运行时间超过1s了,是超时了,但是却告诉我是错误…不会是爆栈,因为栈大小最多就10000,然后默默算了下复杂度…呵呵,我为什么不算复杂度…复杂度这么一算显然要超时了…你倒是告诉我是超时呀!!!口亨!!!
先预处理输入的路径,然后搜索的时候就直接是从小的顶点开始搜的,碰到路径对了的,就直接输出返回就是了
马一发,有生之年是否能解…………
仔细看了下错误的情况,发现运行时间超过1s了,是超时了,但是却告诉我是错误…不会是爆栈,因为栈大小最多就10000,然后默默算了下复杂度…呵呵,我为什么不算复杂度…复杂度这么一算显然要超时了…你倒是告诉我是超时呀!!!口亨!!!
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define maxn 200100 struct node { int u,v,next,num; }l[maxn]; struct nodee { int u,v; }tmp[maxn]; int head[maxn],vis[maxn],top; int n,m; void add(int x,int y,int z) { l[top].u=x,l[top].v=y,l[top].next=head[x],l[top].num=z; head[x]=top++; } void init() { memset(head,0,sizeof(head)); memset(vis,0,sizeof(vis)); } int cmp(nodee x,nodee y) { if(x.u!=y.u) return x.u>y.u; return x.v>y.v; } int anss[maxn], cnt, fli; int search(int x, int d) { int i=0; anss[d]=x; if(fli) return 1; if(d>m) return 0; if(d==m) { for(i=0;i<=d;i++) cout<<anss[i]<<" ";cout<<endl; fli=1; return 1; } for(int i=head[x];i>0;i=l[i].next) { node t=l[i]; if(vis[t.num]) continue; vis[t.num]=1; search(t.v,d+1); vis[t.num]=0; } if(i<=0) return 0; return 1; } int main() { while(cin>>n>>m) { int x,y; init(); top=1; for(int i=0;i<m;i++) cin>>tmp[i].u>>tmp[i].v; if(n==1) {cout<<1<<endl;continue;} sort(tmp,tmp+m,cmp); for(int i=0;i<m;i++) { x=tmp[i].u,y=tmp[i].v; add(x,y,i); add(y,x,i); } cnt=0; fli=0; search(1,0); if(!fli) cout<<-1<<endl; } return 0; }
相关文章推荐
- CCF 201512-4 送货 (并查集+DFS,欧拉路)
- CCF送货
- CCF之送货(java)
- CCF 201512-4 送货(欧拉路径+字典序最小)
- CCF 送货
- CCF 送货 (欧拉路径+字典序最小 80分)
- CCF——送货(欧拉路径)
- CCF 201512-4 送货(最小字典序欧拉回路)
- CCF 201512-4 送货
- CCF 习题 201512-4 送货 (并查集 + DFS 找欧拉道路)
- CCF 2016-12 送货
- CCF送货 欧拉路的判断+Fleury算法输出欧拉路的字典序最小的路径
- ccf 送货
- CCF送货(欧拉图)
- ccf 送货
- CCF 201512-4 送货(欧拉路径+字典序最小)
- ccf 201512-4 送货
- CCF 201512-4 送货 CPP
- ccf认证题-送货
- CCF CSP 送货 欧拉回路/通路