图论中dfs判断是否可行一类问题的写法

来源:互联网 发布:乐清知临公立宿舍学校 编辑:程序博客网 时间:2024/05/22 17:39

 有一次比赛中就是类似dfs染色判断是否可行,当时就蒙了!没写出来,今天贴一小段代码,虽然说特别傻逼哈~

染色法也是可以用来判断图中是否存在奇环的。。。。

 

bool dfs(int u,int pd){    c[u]=pd;    //cout<<u<<" "<<pd<<endl;    for(int i=1;i<=n;i++) if(G[u][i]){        if(c[i]!=-1) {            if(c[i]==c[u]) return 0;            else continue;        }        //这里的写法特别重要,导致返回值先返回到这里,不会直接返回到主函数。        //也就是只要有一个返回false,最终结果就是0。too low!        if(!dfs(i,!pd)) return 0;    }    return 1;}

 再来贴一个dfs判断无向图是否存在环的代码,仔细对比哦!

int col[N];bool find(int u,int fa){    col[u]=1;    for(int i=head[u];i!=-1;i=edge[i].next){        int v=edge[i].to;        if(edge[i].cap==0 || v==fa) continue;        if(col[v]==1) return 1;        else if(col[v]==2) ;        else if(find(v,u)) return 1;    }    col[u]=2;    return 0;}bool flag=1;for(i=1;i<=n;i++)     if(col[i] == 0 && find(i,-1)) {<pre name="code" class="cpp">        flag=0;        break;
}




0 0
原创粉丝点击