题目描述
该题的目的是要你统计图的连通分支数。
输入
每个输入文件包含若干行,每行两个整数i,j,表示节点i和j之间存在一条边。
输出
输出每个图的联通分支数。
样例输入
1 4
4 3
5 5
样例输出
2
题解
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
const int MAXN=1000010;
vector<int> Adj[MAXN];
bool vis[MAXN];
int count=0;
void DFS(int u)
{
vis[u]=true;
for(int i=0;i<Adj[u].size();i++)
{
int v=Adj[u][i];
if(vis[v]==false)
DFS(v);
}
}
void DFSTrave()
{
for(int i=0;i<MAXN;i++)
{
if(vis[i]==false)
{
DFS(i);
count++;
}
}
}
int main()
{
fill(vis,vis+MAXN,true);
int v1,v2;
while(scanf("%d%d",&v1,&v2)!=EOF)
{
Adj[v1].push_back(v2);
Adj[v2].push_back(v1);
//只有有边的点参与计算联通分支数
vis[v1]=vis[v2]=false;
}
DFSTrave();
printf("%d\n",count);
return 0;
}
之前用邻接矩阵做的,一直不对,上网参考了大佬的之后,发现邻接表做貌似好一点?也不知道为啥,还是自己功力不够吧。
真!!编程小白了,在计算机里混了3年,编程还这么差,发现编程真的是要自己思考,动手去写才能有所提高,一味的看别人的代码是没用的,要不然复现出来也可以啊!!!
训练营第一天第一题就花了好久,但是不要气馁哇!!!
坚持坚持坚持!!!加油!!!