poj 3310 Caterpillar 图的遍历
来源:互联网 发布:郑州php培训 编辑:程序博客网 时间:2024/05/15 06:38
题意:
给一个无向图,问是否可以在上面找到一条线,使所有的顶点要么在线上要么不在线上但在与线相连的边上。
思路:
先求各个顶点的度数,遍历度数大于1的点。
代码:
//poj 3310//sepNINE#include<iostream>using namespace std;const int maxN=128;int g[maxN][maxN];int d[maxN],ok[maxN],vis[maxN];int n;void dfs(int u){int v,cnt=0;ok[u]=1;vis[u]=1;for(v=1;v<=n;++v)if(g[u][v]==1&&d[v]>1){++cnt;if(cnt==3)return;}for(v=1;v<=n;++v)if(g[u][v]==1&&vis[v]==0){if(d[v]==1){ok[v]=1;continue;}elsedfs(v);}}int main(){int cases=0;while(scanf("%d",&n)==1&&n){int m;memset(g,0,sizeof(g));memset(d,0,sizeof(d));memset(ok,0,sizeof(ok));memset(vis,0,sizeof(vis));scanf("%d",&m);for(int i=0;i<m;++i){int a,b;scanf("%d%d",&a,&b);g[a][b]=g[b][a]=1;++d[a];++d[b];}if(m!=n-1){printf("Graph %d is not a caterpillar.\n",++cases);continue;}int i,flag=0;for(i=1;i<=n;++i)if(d[i]>1)break;dfs(i);for(i=1;i<=n;++i)if(ok[i]!=1)flag=1;if(flag==1)printf("Graph %d is not a caterpillar.\n",++cases);elseprintf("Graph %d is a caterpillar.\n",++cases);}}
0 0
- poj 3310 Caterpillar 图的遍历
- [POJ 3310][树的直径]Caterpillar
- POJ 3310 Caterpillar
- Poj 3310 Caterpillar (并查集判环+度)
- POJ 3310 Caterpillar 并查集+dfs
- 3310 Caterpillar
- POJ 3310 Caterpillar (BFS + DFS + 并查集)
- POJ 2263 Heavy Cargo(图的遍历)
- POJ 3009 图的遍历+DFS+回溯
- Caterpillar Problem
- poj 3140 Contestants Division 树的遍历
- Sicily 1403. Caterpillar
- poj 2386 poj1562 poj1979 图的遍历 八个方向和四个方向 深搜
- POJ 2230 Watchcow【有向图的欧拉回路+DFS遍历】
- POJ 1849 Two【树的直径+树的遍历】
- 图:图的遍历(深度优先遍历、广度优先遍历)
- Poj 1915 骑士遍历
- java图的遍历方式(深度遍历、广度遍历)
- java 集合遍历
- block引用局部变量
- 上机作业4
- 详解 iPhone5s 的 M7 处理器
- 黑马程序员————java基础--------集合之set接口的特点及应用
- poj 3310 Caterpillar 图的遍历
- LeetCode之Pascal's Triangle II
- 使用ovf模版部署虚拟机
- Remove Duplicates from sorted List
- 以结果为导向,收获结果,感悟过程
- 枚举变量的定义
- ORA-28547 故障处理一例
- 【二分法】题型总结: 快排,轮转数组,双有序数组,sqrt,数组波峰
- 创建一个程序来完成简单的猜数游戏