版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机算法的设计与分析实验报告广度优先算法1、 描述 广度优先搜索,即BFS(Breadth First Search),是一种相当常用的图算法,其特点是:每次搜索指定点,并将其所有未访问过的邻近节点加入搜索队列,循环搜索过程直到队列为空。算法描述如下: (1)将起始节点放入队列尾部(2)While(队列不为空) 取得并删除队列首节点Node 处理该节点Node 把Node的未处理相邻节点加入队列尾部2、 代码#include "stdafx.h"#include<iostream.h>/构造有向图p162,无向图p168#include<string.h
2、>#include<iomanip.h>#include<stdlib.h>/包含exit函数/广度优先#define Null 0/广度优先#define INFINITY 10000/最大值,无穷#define MAX_VERTEX_NUM 20/最大顶点个数,即可以计算的最大规模typedef struct ArcCell float adj;/无权图为1或0,有权图为权重 char info30;/该弧相关信息ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct char vexsMAX_
3、VERTEX_NUM20;/顶点向量,如v1,v2,.等 AdjMatrix arcs; int vexnum,arcnum;MGraph;/广度优先typedef struct QNode int data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front;/队头指针 QueuePtr rear;/队尾指针LinkQueue;/广度优先int LocateVex(MGraph G,char *v) int i,num=-1; for(i=0;i<G.vexnum;i+) if(strcmp(v,G.vex
4、si)=0)/相等时为0,大于为正,小于为负 num=i; break; if(num<0) cout<<"没有匹配的顶点,输入错误!"<<endl; return -1; else return num;void CreateNet(MGraph &G) int i,j,k,s=0; int IncInfo=-1;/IncInfo为0则各弧不含其它信息,有信息则为其他数字 char v220;/存放一条边的两个顶点 char *p; float w;/输入的权重 int direct=-1;/有向图为1,无向图为其他数字 /char
5、temp10020;/这个temp不能放到本函数内,or,G.vexsi引用他时,赋了值,跳出这个函数就没有值.这样不好 /scanf(&G.vexnum,&G.arcnum,&IncInfo); cout<<"构建有向图请输入数字1,构建无向图请输入其他数字(无向图请输入上三角的边)."<<endl; cin>>direct; cout<<"各顶点无信息则输入数字0,有信息输入其他数字."<<endl; cin>>IncInfo; cout<<&
6、quot;请输入顶点和弧数目:"<<endl; cin>>G.vexnum>>G.arcnum; cout<<"请输入"<<G.vexnum<<"个顶点的符号,如v1,v2."<<endl; for(i=0;i<G.vexnum;+i) p=G.vexsi; cin>>p;/注意vexsMAX_VERTEX_NUM中的MAX_VERTEX_NUM大于G.vexnum for(i=0;i<G.vexnum;i+) cout<<G
7、.vexsi<<" " for(i=0;i<G.vexnum;+i) for(j=0;j<G.vexnum;+j) G.arcsij.adj=INFINITY; p=G.; p='0'/问题 for(k=0;k<G.arcnum;+k)/循环弧的次数 cout<<"第"<<k+1<<"次输入:"<<endl; cout<<"出发点:" p=v0; cin>>p; i=Locat
8、eVex(G,p); cout<<"接受点:" p=v1; cin>>p; j=LocateVex(G,p); cout<<"权重:" cin>>w;/输入格式: v1 v2 18 cout<<"i="<<i<<" j="<<j<<endl; G.arcsij.adj=w; if(IncInfo) cout<<"输入信息:" p=G.; cin>&g
9、t;p; if(direct!=1) G.arcsji=G.arcsij; cout<<"顶点数是:"<<G.vexnum<<endl; cout<<"弧数是:"<<G.arcnum<<endl; cout<<"各顶点分别是:" for(i=0;i<G.vexnum;i+) cout<<G.vexsi<<" " cout<<endl; for(i=0;i<G.vexnum;i+) fo
10、r(j=0;j<G.vexnum;j+) cout<<setw(8)<<G.arcsij.adj; if(IncInfo) if(G.arcsij.adj!=INFINITY) cout<<setw(6)<<G.; else cout<<setw(6)<<" " cout<<endl; /广度优先bool visited100;/随便设置一百个布尔值void InitQueue(LinkQueue &Q) Q.front=Q.rear=(QueuePtr)
11、malloc(sizeof(QNode); if(!Q.front) exit(-1); Q.front->next=Null;void EnQueue(LinkQueue &Q,int e) QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if(!p) exit(-1); p->data=e; p->next=Null; Q.rear->next=p; Q.rear=p;void DeQueue(LinkQueue &Q,int &e) QueuePtr p; if(Q.front=Q.rear) c
12、out<<"队头等于队尾!"<<endl; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear=p) Q.rear=Q.front; free(p);int QueueEmpty(LinkQueue &Q) if(Q.front=Q.rear) return 1; else return 0;void visit(MGraph G,int v) cout<<"访问了第"<<v<<"个顶
13、点"<<endl; cout<<"即"<<G.vexsv<<"顶点"<<endl;int FirstAdjVex(MGraph G,int v) int i,num=-1; for(i=0;i<G.vexnum;i+) if(G.arcsvi.adj!=INFINITY) num=i; break; return num;int NextAdjVex(MGraph G,int v,int w) int i,num=-1; for(i=w+1;i<G.vexnum;i+) i
14、f(G.arcsvi.adj!=INFINITY) num=i; break; return num;void BFSTraverse(MGraph G) int v; int u;/出队元素 int w; LinkQueue Q; for(v=0;v<G.vexnum;v+) visitedv=0; InitQueue(Q); for(v=0;v<G.vexnum;v+) if(!visitedv) visitedv=1; visit(G,v); EnQueue(Q,v); while(!QueueEmpty(Q) DeQueue(Q,u); for(w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w) if(!visitedw) visitedw=1; visit(G,w); EnQueue(Q,w); /广度优先void main() MGraph G; CreateNet(G); /这时上面已经求出G.vexn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府采购合同协议的解除条件和程序
- 多功能粘合剂购销合同
- 门票预售合同补充协议
- 正规借款合同模板范文
- 借条协议书示例
- 中移合作合同解读
- 中小学开学第一课352
- 高中生化学元素周期表故事征文
- 二手房房屋买卖合同协议
- 部编版《道德与法治》六年级下册第3课《学会反思》精美课件
- 2024年度餐饮店合伙人退出机制与财产分割协议2篇
- 《招商银行转型》课件
- 灵新煤矿职业病危害告知制度范文(2篇)
- 2024年护校队安全工作制度(3篇)
- 安全生产知识负责人复习题库(附参考答案)
- 2024年安徽省广播电视行业职业技能大赛(有线广播电视机线员)考试题库(含答案)
- 大学英语-高职版(湖南环境生物职业技术学院)知到智慧树答案
- 山东省济南市济阳区三校联考2024-2025学年八年级上学期12月月考语文试题
- 糖尿病酮酸症中毒
- 2025北京语言大学新编长聘人员招聘21人笔试模拟试题及答案解析
- Unit 6 Food Lesson 1(说课稿)-2024-2025学年人教精通版(2024)英语三年级上册
评论
0/150
提交评论