无向图 邻接矩阵bfs 最简单

 上图:

  参考上一篇  

  上码:

#include <iostream>
#include <climits>
#include <queue>
using namespace std;

#define MAX 10

int mat[MAX][MAX];
int visited[MAX];
int n=6;

void bfs(int pos)
{
    cout<<"bfs from "<<pos<<" :"<<endl;
    queue<int> qwq;
    int r;  //记录队头
    cout<<pos<<‘\t‘;
    qwq.push(pos);
    visited[pos]=1;
    while(!qwq.empty())
    {
        r = qwq.front();
        qwq.pop();
        for(int i=0; i<n; i++)
            if(mat[r][i]==1 && !visited[i]){
                cout<<i<<"\t";
                qwq.push(i);
                visited[i]=1;
            }
    }
}

void travelallnodes()
{
    cout<<"travel all nodes :"<<endl;
    int partnum=1;
    for(int i=0; i<n; i++){
        if(!visited[i]){
            cout<<"part "<<partnum++<<" :"<<endl;
            bfs(i);
            cout<<endl<<endl;
        }
    }
    cout<<"---travel all nodes over !"<<endl;
}

void init(){
    for(int i=0; i<n; i++)
        visited[i]=0;
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            mat[i][j]=INT_MAX;
    mat[0][1]=1,mat[0][2]=1,mat[0][4]=1;
    mat[1][0]=1,mat[1][3]=1;
    mat[2][0]=1,mat[2][4]=1;
    mat[3][1]=1;
    mat[4][0]=1,mat[4][2]=1;
    for(int i=0; i<n; i++)
        mat[i][i]=0;
}

int main()
{
    init();
    travelallnodes();

    bfs(1);//从2开始遍历
}

原文地址:https://www.cnblogs.com/guoyujiang/p/11967310.html

时间: 2024-11-09 05:06:56

无向图 邻接矩阵bfs 最简单的相关文章

建图方式一 之 ”前向星“ BFS&amp;&amp;DFS 简单应用

三种建图方式,邻接矩阵.前向星(边表集).邻接链表! 耗时一晚上 ,好好研究了一下 前向星,因为我的指针用的实在是很烂,所以还是 入赘 前向星吧. 问了学长,看了大牛们的博客,终于有点收获了,个人认为 前向星Very Well. 前向星 建图方法: 以储存边的方式来储存图.在构造图时,把边存放在数组里,不需使用指针,只需一个 next  即可是整个图构建完成 . 适用条件: 点集特别多的稀疏图,边数多且繁杂,开邻接矩阵会浪费大量内存. 时间复杂度: O(m),并不比邻接链表差. #include

无向图邻接矩阵和关联矩阵转换

%% 无向图邻接矩阵和关联矩阵转换function w = incandadf(F,f)%F为输入无向图矩阵可以是邻接矩阵或关联矩阵%% 邻接矩阵转关联矩阵if f == 0 m = sum(sum(F))/2; n = size(F,1); w = zeros(n,m); k = 1; for i = 1:n for j =1 : n if F(i,j) ~= 0 w(i,k) = 1; w(j,k) = 1; k = k + 1; end end end%% 关联矩阵 阵转邻接矩else i

迷宫的最短路径(BFS的简单应用)

[题目简述]:给定一个大小为n*m的迷宫.迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动.请求出起点到终点所需的最小步数.(注:本题假定从起点一定可以移动到终点) 如图: #S######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .####.###. ....#...G# [分析]:广度优先搜索是由近及远的搜索,所以在这个问题中采用BFS很合适,只要注意访问过的位

基于邻接矩阵和邻接表的两种方法实现无向图的BFS和DFS

广度优先搜索(Breadth-First-Search)和深度优先搜索(Deep-First-Search)是搜索策略中最经常用到的两种方法,特别常用于图的搜索. BFS的思想: 从一个图的某一个顶点V0出发,首先访问和V0相邻的且未被访问过的顶点V1.V2.--Vn,然后依次访问与V1.V2--Vn相邻且未被访问的顶点.如此继续,找到所要找的顶点或者遍历完整个图.我们采用队列来存储访问过的节点. DFS的思想: 深度优先搜索所遵循的策略就是尽可能"深"的在图中进行搜索,对于图中某一个

无向图 邻接矩阵dfs(最简单)

出处LINK 改写:去除sum变量:新增结点6,实现遍历全图的算法 输出:索引值 1 #include <iostream> 2 #include <climits> 3 using namespace std; 4 #define MAX 10 5 6 int mat[MAX][MAX]; 7 int visited[MAX]; 8 int n=6; 9 10 void dfs(int row){ 11 cout<<row<<'\t'; 12 visite

UVA 821 Page Hopping 网页跳跃(BFS,简单)

题意:给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数.保证任意点对都可达. 思路:简单题.直接穷举每个点,进行BFS求该点到其他点的距离.累加后除去边数即可. 1 #include <bits/stdc++.h> 2 #define LL long long 3 #define pii pair<int,int> 4 #define INF 0x7f7f7f7f 5 using namespace std; 6 const int

dfs和bfs的简单总结

首先是dfs,又名深度优先搜索.看名字就知道,它的核心思想就是一直搜索,先在一条路上面一路撸到底,如果到底没有办法前进了,那么判断是否到达终点,如果没有到达,那么就回溯到之前的点再撸. dfs的要点: 1.考虑当下应该怎么做,在你现在的点上面你应该怎么做,可以怎么做.可以向上吗?可以向下吗? 2.后面的和前面一样的做.递归的思想. 3.要考虑边界,终点等题目给出的条件检测.过滤掉那些不需要的解. 4.利用适当的数据结构,保存当前点是否走过,保存走过的路线等. 模版: void dfs(int s

FZU1892接水管游戏-BFS加上简单的状态压缩和位运算处理

原题地址:http://acm.fzu.edu.cn/problem.php?pid=1892 Problem 1892 接水管游戏 Accept: 108    Submit: 498 Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description 接水管游戏的规则如下: 1.在N*N大小的方格上有两个特别的水管,分别为进水口和出水口: 2.有7种1*1大小的水管需要放在这N*N大小的方格内,使得水流能够从进水口经过这些

算法-无向图

图是由一组顶点和一组能够将两个顶点连接的边组成的,两个顶点通过一条边相连的时,我们称这两个顶点是相邻的,并称这条边依附于两个顶点,某个顶点的都市即为依附于它的边的总数.图是一种比线性表和树更复杂的数据结构,树算是图的一种特殊情况下的数据结构(无环连通图),图的密度是指已经连接的顶点对占所有可能被连接的顶点对的比例,如果一幅图中不同的边的数量只占顶点总数的一小部分,那么图称之为稀疏图,反之是稠密图. 无向图基础 我们首先来来看一个最基本的图: 我们需要一个数据结构能够快速的处理开发过程的各种用例,