zoukankan      html  css  js  c++  java
  • 图的深度优先搜索与广度优先搜索

    无向图的深度优先搜索与广度优先搜索


    #include "stdafx.h"
    #include<vector>
    #include<iostream>
    
    using namespace std;
    
    #define N 9
    typedef struct{
    	int vexnum, arcnum;
    	char vexs[N];
    	int matirx[N][N];
    }graph;
    
    graph g;
    int a[N] = { 0 };
    
    // 初始化图数据  
    // 0---1---2---3---4---5---6---7---8---  
    // A---B---C---D---E---F---G---H---I---  
    void initiate_graph()
    {
    	// A-B, A-D, A-E
    	g.matirx[0][1] = 1;
    	g.matirx[1][0] = 1;
    	g.matirx[0][3] = 1;
    	g.matirx[3][0] = 1;
    	g.matirx[0][4] = 1;
    	g.matirx[4][0] = 1;
    	// B-C  
    	g.matirx[1][2] = 1;
    	g.matirx[2][1] = 1;
    	// C-F  
    	g.matirx[2][5] = 1;
    	g.matirx[5][2] = 1;
    	// D-E, D-G  
    	g.matirx[3][4] = 1;
    	g.matirx[4][3] = 1;
    	g.matirx[3][6] = 1;
    	g.matirx[6][3] = 1;
    	// E-F, E-H  
    	g.matirx[4][5] = 1;
    	g.matirx[5][4] = 1;
    	g.matirx[4][7] = 1;
    	g.matirx[7][4] = 1;
    	// F-H, F-I  
    	g.matirx[5][7] = 1;
    	g.matirx[7][5] = 1;
    	g.matirx[5][8] = 1;
    	g.matirx[8][5] = 1;
    	// G-H  
    	g.matirx[6][7] = 1;
    	g.matirx[7][6] = 1;
    	// H-I  
    	g.matirx[7][8] = 1;
    	g.matirx[8][7] = 1;
    
    }
    
    //深度优先搜寻,递归实现
    void DFS(int k)
    {
    	a[k] = 1;//标记为已经访问过
    	int mm = 0;
    	while (mm < N)
    	{
    		if (g.matirx[k][mm] == 1)
    		{
    			if (a[mm] != 1)
    			{
    				cout << "[" << k << "]" << "[" << mm << "]" << endl;
    				DFS(mm);
    			}
    		}
    		mm++;
    	}
    }
    
    
    
    void BFS()
    {
    	vector<int>vec;
    	vector<int>aa;
    	int k = 0;
    	vec.push_back(0);
    	a[0] = 1;
    	while (vec.size() != 0)
    	{
    		while (k < vec.size())
    		{
    			cout << vec[k] << endl;
    			int mm = 0;
    			//a[vec[k]] = 1;
    			while (mm < N)
    			{
    				if (g.matirx[vec[k]][mm] == 1)
    				{
    					if (a[mm] != 1)
    					{
    						aa.push_back(mm);
    						a[mm] = 1;
    					}
    				}
    				mm++;
    			}
    			k++;
    		}
    		vec = aa;
    		k = 0;
    		aa.clear();
    	}
    
    }
    
    
    
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	initiate_graph();
    	//DFS(0);
    	BFS();
    	system("pause");
    	return 0;
    }
    


    版权声明:

  • 相关阅读:
    RecyclerView中装饰者模式应用
    Android中的Drawable和动画
    Android的线程和线程池
    Bitmap的加载和Cache
    Android的消息机制
    【Java基础】线程和并发机制
    Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
    Asp.Net MVC @Html.TextBox 只允许输入数字问题
    程序员编程10大原则,请牢牢记住
    Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解
  • 原文地址:https://www.cnblogs.com/walccott/p/4956897.html
Copyright © 2011-2022 走看看