问题 B: 连通图
时间限制: 1 Sec 内存限制: 32 MB
献花: 45 解决: 26
[献花][花圈][TK题库]
题目描述
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。
输入
每组数据的第一行是两个整数 n 和 m(0<=n<=1000)。n 表示图的顶点数目,m 表示图中边的数目。如果 n 为 0 表示输入结束。随后有 m 行数据,每行有两个值 x 和 y(0
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
const int MaxN = 1002;
bool map[MaxN][MaxN];
bool visited[MaxN];
int n;
void DFS(int id)
{
visited[id] = true;
for (int i = 1; i <= n; ++i)
{
if (map[id][i] == true && visited[i] == false)
DFS(i);
}
}
int main()
{
#ifdef _DEBUG
freopen("data.txt", "r+", stdin);
#endif // _DEBUG
int k;
int a, b, num;
while (cin >> n >> k, n)
{
memset(map, 0, (n + 1) * MaxN);
memset(visited, 0, n + 1);
for (int i = 0; i < k; ++i)
{
cin >> a >> b;
map[a][b] = map[b][a] = true;
num = a;
}
DFS(num);
bool flag = true;
for (int i = 1; i <= n; ++i)
{
if (visited[i] == false)
{
flag = false;
break;
}
}
flag ? (cout << "YES\n") : (cout << "NO\n");
}
return 0;
}
/**************************************************************
Problem: 1908
User: Sharwen
Language: C++
Result: 升仙
Time:2 ms
Memory:2684 kb
****************************************************************/