博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1144 Network 【求一个网络的割点的个数 矩阵建图+模板应用】
阅读量:4987 次
发布时间:2019-06-12

本文共 1477 字,大约阅读时间需要 4 分钟。

题目地址:

题目:输入一个n,代表有n个节点(如果n==0就结束程序运行)。

        在当下n的这一组数据,可能会有若干行数据,每行先输入一个节点a, 接下来先输入一个字符,再输入一个数b,

        表示a与b是连通的,如果输入的字符是空格就继续本行的输入,如果是'\n',就结束本行的输入。(可以看本题目

        最后的提示部分)

       建完图后就是进行tarjan的dfs算法了,是割点的标记一下,割边就不用管了。

code:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define N 1010using namespace std;//邻接矩阵实现 求割边 割点int n;bool g[N][N];bool vis[N];int dfn[N], low[N], parent[N];bool cut_point[N]; //是不是割点void tarjan(int u){ static int counter=0; int children=0; vis[u]=true; dfn[u]=low[u]=++counter; for(int k=1; k<=n; k++){ if(g[u][k]==true){ int v=k; if(!vis[v]){ children++; parent[v]=u; tarjan(v); low[u]=min(low[u], low[v]); if(parent[u]== -1 && children >1){ cut_point[u]=true; } if(parent[u]!= -1 && low[v]>=dfn[u] ){ cut_point[u]=true; } if(low[v]>dfn[u]){ //这是割边 } } else if(v!=parent[u]){ low[u]=min(low[u], dfn[v]); } } }}int main(){ int i, j; while(scanf("%d", &n)&&n!=0 ){ int a, b; memset(g, false, sizeof(g)); memset(vis, false, sizeof(vis)); memset(parent, -1, sizeof(parent)); memset(cut_point, false, sizeof(cut_point)); while(scanf("%d", &a) && a!=0 ){ while(getchar()!='\n'){ scanf("%d", &b); g[a][b]=true; g[b][a]=true;//建立双向边 } } tarjan(1); int cnt=0; for(i=1; i<=n; i++){ if(cut_point[i]==true ){ cnt++; } } printf("%d\n", cnt ); } return 0;}

 

转载于:https://www.cnblogs.com/yspworld/p/4675321.html

你可能感兴趣的文章
Linux下的crontab定时执行任务命令详解
查看>>
【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题
查看>>
.Net_05_事务的基本语法(Sql 语句)
查看>>
c++ 获取某个进程个数
查看>>
SparkSQL相关语句总结
查看>>
[洛谷P1514]引水入城
查看>>
[NC189A]数字权重
查看>>
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
查看>>
VS2015和OpenCV配置
查看>>
PHP_D4_“简易聊天室 ”的具体技术实现
查看>>
[BAT]通过schtasks.exe远程调用windows 2008 server上的计划任务,提示ERROR : Access is denied...
查看>>
关于实习的一些问题
查看>>
Mybatis Insert、update、delete流程
查看>>
NameValueCollection与Hashtable的区别
查看>>
DevExpress XtraReports 入门三 创建 Master-Detail(主/从) 报表
查看>>
Json对象的深浅拷贝
查看>>
HDOJ-1013
查看>>
A. Bus to Udayland
查看>>
Python 基础篇:字典、集合、文件操作
查看>>
Jmail发送邮件与带附件乱码解决办法
查看>>