图的宽度优先搜索

原创 2015年07月06日 21:56:59

图的宽度优先搜索是按照某种顺序访问一个节点的所有子节点这一层节点扫描结束后再扩展到下一层



访问顺序为1-2-3-4-5

现在在第一行输入n个节点,m个关系式

接下来输入m行关系式,每行关系式包含c,d分别表示c,d节点相连

要求输出图的宽度有限遍历顺序~~

#include <iostream>

#include <cstdio>
#include <queue>
using namespace std;
void dfs(int cur);
 int book[101];//用来标记该节点是否被访问过,初始化为未访问过
  int a[101][101];
   queue<int>q;
  int n;//n为总结点的个数
  int main()
  {

      int i,j,c,d,m,temp;//m为需要读入关系式的个数
      scanf("%d%d",&n,&m);
      for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)//从一开始是因为节点关系从1~n
        if (i==j) a[i][j]=0;//如果为同一点,则距离为0(事实上这一题0和无穷大可以归为一类,这样写只是为了方便理解,因为只考虑这两点是否相连,即是否等于1)
        else a[i][j]=10000;//设置两点不相连(即距离无穷大)
        for (i=1;i<=m;i++)
        {

            scanf("%d%d",&c,&d);
            a[c][d]=1;
            a[d][c]=1;//无向图
        }
        book[1]=1;//从1开始遍历(你也可以规定从哪里开始遍历)
        q.push(1);
        while(!q.empty())
        {
        printf("%d ",q.front());
        temp=q.front();//记录元素
        for (i=1;i<=n;i++)//按照某种顺序(这里其实默认从数字小到大排列)
        if ((a[i][temp]==1)&&book[i]==0)//如果第i个节点与cur相连,同时第i个没有被访问过
       {
        q.push(i);
        book[i]=1;//每个点只要访问一次
       }
       q.pop();
       }

     return 0;

}

  }

参考《啊哈!算法》



相关文章推荐

【算法入门】广度/宽度优先搜索(BFS)

广度/宽度优先搜索(BFS) 【算法入门】 郭志伟@SYSU:raphealguo(at)qq.com 2012/04/27 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广...

数据结构:图的遍历--深度优先、广度优先

图的遍历是指从图中的某一顶点出发,按照一定的策略访问图中的每一个顶点。当然,每个顶点有且只能被访问一次。 在图的遍历中,深度优先和广度优先是最常使用的两种遍历方式。这两种遍历方式对无向图和有向图都是适...

生成图-深度优先搜索/宽度优先搜索

问题提出:

FZU 1408 位图(宽度优先搜索)

对这个题我只想说一句话,经典,完美,逆袭。一开始这个题我是这么做的:从0点出发去找离它最近的1点,,,无奈啊,,,爆了内存。。没找到合适的修改方法…. 后来我想到了从1点找0点的方法。这样就节省了很大...

九宫排序的宽度优先搜索

  • 2009年04月17日 20:24
  • 988KB
  • 下载

【Java】八数码的宽度优先搜索算法及用户界面

算法部分: import java.util.*; public class EightNumPath { final static int dx[] = {-1, 1, 0, 0}; fina...

白书2.1.5宽度优先搜索(迷宫的最短路径)

问题描述: 迷宫的最短路径 给定一个大小为N*M的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。假定从起点开始一定能够走到终点。 输...
  • quper1g
  • quper1g
  • 2016年01月20日 18:46
  • 269

BFS 宽度优先搜索 算法摘记

源自网络与书籍   自己学习 算法摘记
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图的宽度优先搜索
举报原因:
原因补充:

(最多只允许输入30个字)