邻接矩阵图的广度优先遍历,用c++实现或c都可以

课程设计
设计目的
1.掌握图的邻接矩阵存贮结构。
2.掌握队列的基本运算实现。
3.掌握图的邻接矩阵的算法实现。
4.掌握图的广度优先搜索算法实现。
设计内容和要求
对任意给定的图(顶点数和边数自定),建立它的邻接矩阵并输出,然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度优先搜索算法。

#include <iostream>
using namespace std;
class queue //用数组实现的循环队列
{
public:
queue();
void empty();
bool isEmpty();
int front();
void push(int e);
void pop();
private:
int arr[150];
int head;
int end;
};
queue::queue()
{
empty();
}
void queue::empty()
{
head=end=0;
}
bool queue::isEmpty()
{
if(head==end)return true;
else
return false;
}
int queue::front()
{
if(isEmpty())return -1;
else
return arr[head];
}
void queue::push(int e)
{
arr[end]=e;
end=(end+1)%150;
}
void queue::pop()
{
head=(head+1)%150;
}
int main()
{
queue q;
bool map[10][10]; //n<=10
int n,k;
for(int i=0;i<10;i++)for(int j=0;j<10;j++)map[i][j]=false;
cout<<"please input the number of nodes"<<endl;
cin>>n;
cout<<"please input the number of edges"<<endl;
cin>>k;
for(int i=0;i<k;i++)
{
int a,b;
cin>>a>>b; //存在以a、b为端点的边,从1开始编号
a--;b--;
map[a][b]=map[b][a]=true; //无权、无向图
}
//输出邻接矩阵
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)cout<<map[i][j]<<'\t';
cout<<endl;
}
//广搜,输出从0开始的遍历序列
bool rec[10];
for(int i=0;i<n;i++)rec[i]=false;
q.push(0);
rec[0]=true;
while(!q.isEmpty())
{
int cur=q.front();
q.pop();
cout<<cur+1<<'\t';
for(int i=0;i<n;i++)
{
if(!map[cur][i])continue;
if(rec[i])continue;
q.push(i);
rec[i]=true;
}
}
return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

邻接矩阵图的广度优先遍历,用c++实现或c都可以
include <iostream> using namespace std;class queue \/\/用数组实现的循环队列 { public:queue();void empty();bool isEmpty();int front();void push(int e);void pop();private:int arr[150];int head;int end;};queue::queue(){ empty();} void queue::empty(){ head=end=0;}...

怎么根据邻接矩阵求广度优先遍历
4. 当队列不为空时,执行以下步骤:- 从队列中取出一个节点,将其输出或进行其他操作。- 遍历该节点的邻居节点:- 如果邻居节点未被访问过,则将其标记为已访问,并将其加入队列。5. 重复步骤4,直到队列为空。在邻接矩阵中,可以通过访问矩阵中的元素来判断节点之间是否有边相连。如果邻接矩阵中的...

...矩阵数据结构的定义、创建;图的深度优先遍历、广度优先遍历...
\/* 程序1:邻接表的dfs,bfs 其中n是点的个数,m是边的个数,你需要输入m条有向边,如果要无向只需要反过来多加一遍即可。*\/#include <stdio.h>#include <string.h>#define MAXM 100000#define MAXN 10000int next[MAXM],first[MAXN],en[MAXM],n,m,flag[MAXN],pd,dl[MAXN],hea...

...2验证图的深度优先、广度优先遍历算法 3验证最短路径
1、邻接表表示的图中分别用DFS和BFS遍历 include <cstdio> include <cstring> include <queue> using namespace std;\/\/\/ \/\/ Description: 图的邻接表的结点 struct Edge { int dest; \/\/ 目标结点下标 \/\/ int value; \/\/ 路径长度 Edge *link; ...

从邻接矩阵怎么看出深度优先遍历结果
先由邻接矩阵把图画出来呀。深度优先遍历使用递归,对于一个结点,递归访问他没有访问过的相邻节点。就像走迷宫一样,已知走到无路可走,然后回溯,找下一个路口。广度优先遍历使用队列,当一个节点出队的时候,把他的相邻未访问节点入队。就像重度近视的人眼镜掉了找眼镜,会先找自己最近的一圈,然后...

试以邻接矩阵为存储结构,写出连通图的深度优先搜索算法。
\/* MGraph.cc: 图的邻接矩阵存储表示和实现 *\/ \/* 包含图类型Graph定义;创建图;深度优先遍历;广度优先遍历 *\/ \/* 用到引用型参数,在TC下无法通过编译,VC等C++编译器可通过 *\/ include <stdio.h> include <string.h> include <limits.h> \/\/含INT_MAX define VType char \/\/顶点...

求一个C语言编程,图的遍历,深度优先和广度优先搜索的程序。要浅显易懂...
scanf("%c %c %d",&a,&b,&w); \/\/输入一条边依附的顶点和权值 temp=getchar(); \/\/接收回车 s1=Locate(G,a);s2=Locate(G,b);G.arcs[s1][s2]=G.arcs[s2][s1]=w;} } \/\/图G中顶点k的第一个邻接顶点 int FirstVex(Graph G,int k){ if(k>=0 && k<G.vexnum){ \/\/k合理...

图的遍历:深度优先搜索(邻接矩阵存放)
程序如下,编译环境vs2005和dev-c++,将图中顶点数和边线数组改为实际值。\/* 图的深度优先遍历 *\/ include <stdlib.h> include <stdio.h> struct node \/* 图顶点结构定义 *\/ { int vertex; \/* 顶点数据信息 *\/ struct node *nextnode; \/* 指下一顶点的指标 *\/ };type...

用邻接矩阵存储无向图,并用深度优先和广度优先遍历搜索输出序列,要能...
cout<<"1.建立无向图的邻接表"<<endl;cout<<"2.深度遍历图"<<endl;cout<<"3.广度遍历图"<<endl;cout<<"4.结束程序运行"<<endl;cout<<"———"<<endl;cout<<"请输入你的选择(1, 2, 3, 4:)"<<endl;cin>>cord;switch(cord){ case 1:creatgraph(adjlist);break;case 2:dfstrave...

谁可以告诉我这段关于图论的代码大体是什么意思,语言是c++
第一段是建立邻接矩阵(自行百度)a[x][y]=1;表示点x到点y有路径(单向的)a[y][x]=a[x][y]=1;表示这是无向图,x能到y,y也能到x 第二段就是广度优先搜索(自行百度)过程 输入一个起点t,将点t加入数组,并标记为已遍历,记序号为open=0 从数组中取出序号为open的点,记为k,...

相似回答