永发信息网

关于 图的遍历操作 —— 广度优先搜索遍历 的疑问。

答案:1  悬赏:50  手机版
解决时间 2021-08-10 04:50

这里先抽象一个队列:

QUEUE Q;

SETNULL(Q);     // 队列清空

EMPTY(Q);      // 队列Q为空返回true

n = DEQUEUE(Q);  // 出队

ENQUEUE(Q, n);    // 入队

 。

使用邻接矩阵存储,先假设已有定义 以及 初始化:

typedef struct {

    sometype matrix [X+1] [X+1];       // 邻接矩阵,习惯上数组标号0的元素不用,故 X+1,下同

    string vertex[X+1];             // 顶点的名字

    int n, e;                  // n 是顶点,e 是边数

} Graph;

Graph graph;

 。

bool visited[n+1];  // all of false

void BFS(int vex)

{

    SETNULL(Q);

    ENQUEUE(Q, vex);

              //

    // access the first vertex, ex, cout << graph.vertex[vex] <<endl;

    visited[vex] = true;

    while( !EMPTY(Q) ) {

        int i = DEQUEUE(Q);

        for(int j = 1; j <= graph.n; j++)

            if( graph.matrix[i][j] == 1 && !visited[j] )  // == 1 因存储结构而异

            {

                // access other vertex, ex, cout << graph.vertex[j] <<endl;

                visited[j] = true;

                ENQUEUE(Q, j);

            }

    }

}

这是来自于十一五的书,里面的一些注释是自己加的。

我的疑问是,如果图式 有向图 的话,那么假设一个图:

如果图是这样的话,那么

if( graph.matrix[i][j] == 1 && !visited[j] )

好像更本就进不去吧?

所以我认为这句应改为

if( (graph.matrix[i][j] == 1 || graph.matrix[j][i] == 1) && !visited[j] )

大家看下我这个分析是不是正确的。

最佳答案

你这样的话就有问题了。


因为在有向图中你能从 j 到 i 不一定就能从 i 到 j。如果改成你那样了还叫有向图吗? 你那样遍历出来的点不一定是从i 出发能到达的。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大家听过“鹊桥逝”么
华硕笔记本电脑报价表
染后头发该怎么护理
懂电脑得进,求助!帮我看看这些配置如何?那
可不可以把提过的问题删除
SJ 12MIN后的背景音乐是什么..
找本小说 百度搜不到
求VOCALOID 2 的正确下载包
女孩子要怎么打扮才会变漂亮吖?
如何解决ARP攻击?
配置电脑价钱
太刀狂战怎么加点 刷图兼PK的
人身安全理念有哪些?
你知道韩庚的年龄是多少吗?
我的电脑十分钟能重启3.4次,怎么回事
推荐资讯
8090踢馆夜魏晨怎么没来?
2010志願填報
怎样测量近视眼镜(凹透镜)焦距 利用阳光和1
请问下从怀化汽车南站到河西天凯综合大市场坐
痤苍软膏有什么用。?
有什么玩的游戏?
传奇服务端如何配置
手机视频误删,求回复方法
男人为什么不喜欢七夕?
求QQ爱墙种子为点亮图标
街头篮球C的全攻略?
植物大战僵尸为什么我只能玩2关就重新开始了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?