PAT1013. Battle Over Cities(邻接矩阵、邻接表分别dfs)

//采用不同的图存储结构结构邻接矩阵、邻接表分别dfs,我想我是寂寞了吧,应该试试并查集,看见可以用并查集的就用dfs,bfs代替。。。。。。怕了并查集了

//邻接矩阵dfs

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1001;
int g[maxn][maxn];
int n,tmp;
bool vis[maxn];
void dfs(int v)
{
vis[v]=true;
for(int i=1;i<=n;i++)
{
if(!vis[i]&&g[v][i]>0)dfs(i);
}
}
int dfstra()
{
int i;
fill(vis,vis+maxn,false);
int cnt=0;
for(i=1;i<=n;i++)
if(g[tmp][i]>0)g[tmp][i]=g[i][tmp]=-1;
for( i=1;i<=n;i++)
{
if(!vis[i]&&i!=tmp)
{
dfs(i);
cnt++;
}
}
for(i=1;i<=n;i++)
if(g[tmp][i]<0)g[tmp][i]=g[i][tmp]=1;
return cnt-1;
}
int main()
{
freopen("input.txt","r",stdin);
int i,j,m,k;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
int a,b;
fill(g[0],g[0]+maxn*maxn,0);
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
g[a][b]=g[b][a]=1;
}
for(i=0;i<k;i++)
{
scanf("%d",&tmp);
printf("%d\n",dfstra());
}
}
return 0;
}

//邻接表dfs

#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=1001;
vector<int >g[maxn];
bool vis[maxn];
int n,cur;
void dfs(int v)
{
vis[v]=true;
for(int i=0;i<g[v].size();i++)
{
int t=g[v][i];
if(!vis[t]&&t!=cur)dfs(t);
}
}
int dfstra()
{
int i;
fill(vis,vis+maxn,false);
int cnt=0;
for( i=1;i<=n;i++)
{
if(!vis[i]&&i!=cur)
{
dfs(i);
cnt++;
}
}
return cnt-1;
}
int main()
{
freopen("input.txt","r",stdin);
int i,j,m,k;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
int a,b;
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
g[a].push_back(b);
g[b].push_back(a);
}
for(i=0;i<k;i++)
{
scanf("%d",&cur);
printf("%d\n",dfstra());
}
}
return 0;
}

时间: 2024-10-13 19:40:20

PAT1013. Battle Over Cities(邻接矩阵、邻接表分别dfs)的相关文章

数据结构学习笔记05图 (邻接矩阵 邻接表--&gt;BFS DFS)

数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边<v, w> 表示从v指向w的边(单行线) 不考虑重边和自回路 无向图:边是无向边(v, w) 有向图:边是有向边<v, w> 连通:如果从V到W存在一条(无向)路径,则称V和W是连通的 连通图(Connected Graph):如果对于图的任一两个顶点v.w∈V,v和w都是连通的,则称

图基本算法 图的表示方法 邻接矩阵 邻接表

要表示一个图G=(V,E),有两种标准的表示方法,即邻接表和邻接矩阵.这两种表示法既可用于有向图,也可用于无向图.通常采用邻接表表示法,因为用这种方法表示稀疏图(图中边数远小于点个数)比较紧凑.但当遇到稠密图(|E|接近于|V|^2)或必须很快判别两个给定顶点手否存在连接边时,通常采用邻接矩阵表示法,例如求最短路径算法中,就采用邻接矩阵表示. 图G=<V,E>的邻接表表示是由一个包含|V|个列表的数组Adj所组成,其中每个列表对应于V中的一个顶点.对于每一个u∈V,邻接表Adj[u]包含所有满

&lt;图论入门&gt;邻接矩阵+邻接表

非本人允许请勿转载. 趁热打铁,学会了邻接表把这个总结一下,以及感谢大佬uncle-lu!!!(奶一波)祝早日进队! 首先,图论入门就得是非常基础的东西,先考虑怎么把这个图读进去. 给定一个无向图,如下 怎么把这个图的数据读入进去呢? 把这个图剖析开来看,1连着的是2和3,2连着4和5,3连着6和7,4连着5,5连着8和6,6连着9. 所以这个图可以用一种神奇的东西----邻接矩阵来存.如下,能联通的制为1,不能联通的制为0. 那么可以看出来,这个邻接矩阵光读入的时间复杂度就是O(N2)的了,在

HDU 1285 确定比赛名次 拓扑排序(邻接矩阵 邻接表

确定比赛名次 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前.现在请你编程序确定排名. Input 输

网络流三大算法【邻接矩阵+邻接表】POJ1273

网络流的基本概念跟算法原理我是在以下两篇博客里看懂的,写的非常好. http://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html http://www.cnblogs.com/zsboy/archive/2013/01/27/2878810.html 网络流有四种算法, 包括 Edmond-Karp(简称EK), Ford-Fulkerson(简称FF), dinic算法以及SAP算法. 下面我会写出前三种算法的矩阵跟邻接表的形式, 对于第四种以后有必要

数据结构----邻接矩阵-邻接表

要表示一个图G=(V,E),有两种标准的表示方法,即邻接表和邻接矩阵.这两种表示法既可用于有向图,也可用于无向图.通常采用邻接表表示法,因为用这种方法表示稀疏图(图中边数远小于点个数)比较紧凑.但当遇到稠密图(|E|接近于|V|^2)或必须很快判别两个给定顶点手否存在连接边时,通常采用邻接矩阵表示法,例如求最短路径算法中,就采用邻接矩阵表示. #include<stdio.h> #include<string.h> #include <stdlib.h> #define

PAT-1013 Battle Over Cities (25 分) DFS求连通块

It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any other highways to keep the rest of

PAT1013. Battle Over Cities (25)

1013. Battle Over Cities (25) It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any othe

PAT1013. Battle Over Cities

1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that cit