1. 程式人生 > >圖的遍歷 | 1016 連通塊塊數

圖的遍歷 | 1016 連通塊塊數

dfs eof log queue cto space sizeof color i++

dfs解法:

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>


#define I scanf
#define OL puts
#define O printf
#define
F(a,b,c) for(a=b;a<c;a++) #define FF(a,b) for(a=0;a<b;a++) #define FG(a,b) for(a=b-1;a>=0;a--) #define LEN 1010 #define MAX 0x06FFFFFF #define V vector<int> using namespace std; int n,m,k; vector<int> g[LEN]; int vis[LEN]; int bk; void dfs(int s){ int size=g[s].size(); int
i; vis[s]=1; for(i=0;i<size;i++){ int o=g[s][i]; if(vis[o]==0 && o!=bk) dfs(o); } } int main(){ // freopen("1016.txt","r",stdin); int a,b,i,j; I("%d%d%d",&n,&m,&k); FF(i,m){ I("%d%d",&a,&b); g[a].push_back(b); g[b].push_back(a); } FF(i,k){ I(
"%d",&bk); memset(vis,0,sizeof vis) ; int ans=0; for(j=1;j<=n;j++){ if(j!=bk && vis[j]==0){ dfs(j); ans++; } } printf("%d\n",ans-1) ; } return 0; }

圖的遍歷 | 1016 連通塊塊數