zoukankan      html  css  js  c++  java
  • BFS 和 DFS

    DFS用到递归,BFS要用到一个辅助队列

    #include "stdafx.h"
    
    #include<iostream> 
    #include<vector>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<numeric>
    
    using namespace std;
    struct AMGraph {
    	vector<int> vexs;
    	vector<vector<int>> arcs;
    	int vecnums, arcnums;
    };
    class Solution 
    {
    public:
    	vector<bool> vistied;
    	AMGraph createGraph()
    	{
    		AMGraph G;
    		G.vecnums = 5;
    		G.arcnums = 5;
    		vector<int> vec1 = { 0,1,0,0,0 };
    		vector<int> vec2 = { 1,0,1,1,0 };
    		vector<int> vec3 = { 0,1,0,0,1 };
    		vector<int> vec4 = { 0,1,0,0,1 };
    		vector<int> vec5 = { 0,0,1,1,0 };
    		vector<vector<int>>vec;
    		vec.push_back(vec1);
    		vec.push_back(vec2);
    		vec.push_back(vec3);
    		vec.push_back(vec4);
    		vec.push_back(vec5);
    
    		G.vexs = { 1,2,3,4,5 };
    		G.arcs = vec;
    		return G;
    	}
    	void DFS(AMGraph G,int v)
    	{
    		vistied[v] = true;
    		cout << v<<" ";
    		for (int i = 0;i < G.vecnums;i++)
    		{
    			if (G.arcs[v][i]==1 && vistied[i] == false)
    			{
    				DFS(G, i);
    			}
    		}
    	}
    	
    
    	void DFSTravers(AMGraph G)
    	{
    		vistied.clear();
    		for (int i = 0;i < G.vecnums;i++)
    		{
    			vistied.push_back(false);
    		}
    		for (int i = 0;i < G.arcnums;i++)
    		{
    			if (vistied[i] == false)
    			{
    				DFS(G, i);
    			}
    		}
    		cout << endl;
    	}
    
    	queue<int> qu;
    	void BFS(AMGraph G,int v)
    	{
    		vistied[v] = true;
    		qu.push(v);
    		while (!qu.empty())
    		{
    			int v = qu.front();
    			qu.pop();
    			cout << v << " ";
    			for (int i = 0;i < G.vecnums;i++)
    			{
    				if (G.arcs[v][i] == 1 && vistied[i] == false)
    				{
    					vistied[i] = true;
    					qu.push(i);
    				}
    			}
    		}
    		
    	}
    	void BFSTravers(AMGraph G)
    	{
    		vistied.clear();
    		for (int i = 0;i < G.vecnums;i++)
    		{
    			vistied.push_back(false);
    		}
    		for (int i = 0;i < G.vecnums;i++)
    		{
    			if (vistied[i] == false)
    			{
    				BFS(G, i);
    			}
    		}
    		cout << endl;
    	}
    };
    
    int main()
    {
    	
    	Solution so;
    	AMGraph G=so.createGraph();
    	so.DFSTravers(G);
    	so.BFSTravers(G);
    	return 0;
    	
    }
  • 相关阅读:
    PHP(表单元素)
    PHP(一般标签介绍,标签特性,实体名称,绝对路径与相对路径)
    Oracle课程档案,第十七天
    Oracle课程档案,第十六天
    Oracle课程档案,第十四天
    Oracle课程档案,第十五天
    Oracle课程档案,第十三天
    Oracle课程档案,第十二天
    Oracle课程档案。第十一天
    [haoi2011]防线修建
  • 原文地址:https://www.cnblogs.com/wdan2016/p/6829693.html
Copyright © 2011-2022 走看看