zoukankan      html  css  js  c++  java
  • A1013 Battle Over Cities [图的dfs遍历]

    在这里插入图片描述
    用图的dfs遍历来算删除结点后连通块的个数,连通块的个数减1就是需要添加的线的个数

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<string>
    #include<math.h>
    #include<algorithm>
    #include<map>
    #include<cstring>
    using namespace std;
    const int maxv = 1001;
    vector<int>g[maxv];
    bool vis[maxv];
    
    int currentpoint;
    void dfs(int v)
    {
    	if (v == currentpoint)
    		return;
    	vis[v] = true;
    	for (int i = 0; i < g[v].size(); i++)
    	{
    		if(vis[g[v][i]]==false)
    			dfs(g[v][i]);
    	}
    }
    
    int main()
    {
    	int n, m, k;
    	scanf("%d%d%d",&n,&m,&k);
    	for (int i = 0; i < m; i++)
    	{
    		int a, b;
    		scanf("%d%d",&a,&b);
    		g[a].push_back(b);
    		g[b].push_back(a);
    	}
    	for (int j = 0; j < k; j++)
    	{
    		scanf("%d",&currentpoint);
    		memset(vis, false, sizeof(vis));
    		int block = 0;
    		for (int i = 1; i <= n; i++)
    		{
    			if (i != currentpoint && vis[i] == false)
    			{
    				dfs(i);
    				block++;
    			}
    		}
    		cout << block - 1 << endl;
    	}
    }
    
  • 相关阅读:
    php设计模式 — 简单工厂模式(静态工厂方法模式)
    Vue-Router
    各种选项卡
    jq动画
    如何使用swiper写轮播
    Gulp代码压缩
    闭包
    jquery.validation校验
    grunt-js文件压缩
    CSS
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811997.html
Copyright © 2011-2022 走看看