图-深度优先广度优先,以及邻接表的创建
来源:互联网 发布:2016淘宝最大的店铺 编辑:程序博客网 时间:2024/06/05 17:54
将上篇内容改成了C++版本,为了直接使用queue这个容器,只是为了自学而敲的
//#include <stdio.h>#include <iostream>#include <string>#include <queue>//#include <stdlib.h>//#include <curses.h>using namespace std;typedef char VertexType; //顶点类型用户自定义typedef int EdgeType; //边上的权值类型用户自定义#define MAXVEX 100 //最大顶点数#define INFINITY 65535 //代表无穷大,用来表示不存在的边的权值为无穷大#define DEBUG#define MAXVEX 100typedef int Boolean;Boolean visited[MAXVEX];#define TRUE 1#define FALSE 0typedef struct{VertexType vexs[MAXVEX]; //顶点EdgeType arc[MAXVEX][MAXVEX]; //邻接矩阵int numVertexes, numEdges; //顶点数,边数}Graph;//定位???int locates(Graph *g, char ch){int i = 0;for(i=0; i<g->numVertexes; i++){if(g->vexs[i]==ch){break;}}if(i>g->numVertexes){return -1;}return i;}void CreatGraph(Graph *g){int i, j, k, w;//printf("input num of vertexs, edges:\n");cout<<"input num of vertexs, edges:"<<endl;//scanf("%d, %d", &(g->numVertexes), &(g->numEdges));cin>>g->numVertexes>>g->numEdges;#ifdef DEBUG//printf("%d %d\n", g->numVertexes, g->numEdges);cout<<g->numVertexes<<' '<<g->numEdges<<endl;#endiffor(i = 0; i <g->numVertexes;i++){g->vexs[i] = getchar();//没看懂啊while(g->vexs[i]=='\n'){g->vexs[i] = getchar();}}#ifdef DEBUGfor(i = 0; i < g->numVertexes; i++){//printf("%c ", g->vexs[i]); cout<<g->vexs[i]<<' ';}//printf("\n");cout<<endl;#endiffor(i = 0; i <g->numVertexes;i++){for(j=0; j<g->numVertexes;j++){ if(i==j) g->arc[i][j]=0;g->arc[i][j]=INFINITY; //邻接矩阵初始化为无穷大}}for(k = 0; k<g->numEdges; k++){char p,q;//printf("input i , j of (vi, vj) and weight:\n");cout<<"input i, j of (vi,vj) and weight:"<<endl;p =getchar();while(p=='\n'){p=getchar();}q=getchar();while(q=='\n'){q=getchar();}//scanf("%d",&w);cin>>w;int m=-1;int n=-1;m=locates(g,p);n=locates(g,q);if(m==-1||n==-1){fprintf(stderr, "there is no this vertex.\n");return ;}g->arc[m][n]=w;//没有以下这句话就是有向图了g->arc[n][m]=g->arc[m][n]; //无向图,所以是对称的}}//打印无向图void printGraph(Graph *g){int i , j;for(i = 0; i<g->numVertexes;i++){for(j=0; j<g->numVertexes;j++){//printf("%10d ",g->arc[i][j]);cout<<g->arc[i][j]<<' ';}//printf("\n");cout<<endl;}}//邻接矩阵的深度优先算法void DFS(Graph *g, int i){int j;visited[i] =TRUE;//printf("%c ", g->vexs[i]);cout<<g->vexs[i]<<endl;for(j = 0; j < g->numVertexes; j++){//已经确定没有关系的两定点之间权值用无限大表示if(g->arc[i][j]!=65535&&!visited[j]){DFS(g,j);}}}//邻接矩阵的深度遍历操作void DFSTraverse(Graph *g){int i;for(i = 0; i<g->numVertexes;i++){visited[i]=FALSE;}for(i = 0; i<g->numVertexes;i++){if(!visited[i]){DFS(g,i);}}}void BFSTraverse(Graph *g){int i,j;queue<char> q;for(i = 0; i<g->numVertexes;i++){visited[i]=FALSE;//初始化}//InitQueue(&q);for(i=0;i<g->numVertexes;i++){if(!visited[i]){visited[i]=TRUE;//printf("%c ",g->vexs[i]);cout<<g->vexs[i]<<endl;//EnQueue(&q,i);q.push(i);//while(!QueueEmpty(q)){while(!q.empty()){int m;//Dequeue(&q,&m);m=q.front();q.pop();for(j=0;j<g->numVertexes;j++){if(g->arc[m][j]!=65535&&!visited[j]){visited[j]=TRUE;//printf("%c ",g->vexs[j]);cout<<g->vexs[j]<<endl;//Enqueue(&q,j);q.push(j);}}}}}}int main(int argc, char ** argv){Graph g;CreatGraph(&g); /*g.numVertexes = 5; g.numEdges=6; g.vexs[0]=0; g.vexs[1]=1; g.vexs[2]=2; g.vexs[3]=3; g.vexs[4]=4;g.vexs[5]={'0'};g.arc[5][5] = {65535};//g.arc[5][5]={65535,65535,65535,65535,6,9,65535,3,65535,65535,2,65535,65535,5,65535,65535,65535,65535,65535,1};*/cout<<"DFS:"<<endl;DFSTraverse(&g);//printf("\n");cout<<endl;cout<<"BFS:"<<endl;BFSTraverse(&g);//printGraph(&g);return 0;}
这是在网上找的一个示例图,接下来我们的输入按照这个来进行,下图是运行结果
阅读全文
0 0
- 图-深度优先广度优先,以及邻接表的创建
- 邻接表的深度优先遍历以及广度优先遍历
- 图: 广度深度优先遍历(邻接表)
- 图的邻接表表示、广度优先、深度优先搜索
- 邻接图的广度优先遍历和深度优先遍历
- 图的深度、广度优先搜索(邻接表)
- 邻接表-图的遍历-广度和深度优先遍历
- 图(邻接表)的深度、广度优先遍历
- 图深度优先搜索广度优先搜索,邻接表
- 图邻接表存储 深度优先和广度优先遍历
- C语言以邻接表为存储结构的图的构造以及广度优先,深度优先遍历
- 邻接表--创建图、删除图、深度优先搜索、广度优先搜索---代码
- 基于邻接表储存的图的深度优先和广度优先遍历
- 图基本算法 图搜索基于邻接表的(广度优先、深度优先)
- 图算法:1、邻接表实现图的深度优先遍历,广度优先遍历
- 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现
- 图的深度优先和广度优先遍历算法(用邻接表作为存储结构)
- 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现
- 进程间通信总结 && IPC主题三之 共享内存
- kotlin
- ajax传递参数
- drools规则出现中文验证 与jvm 默认编码(The default charset is determined during virtual-machine)的关系很重要
- 脚本
- 图-深度优先广度优先,以及邻接表的创建
- react native navigation 参数传递调用
- Guava之消息处理机制
- Thinkphp5学习(21)关联:一对一
- windows下安装TensorFlow(Win8 + Anaconda4.4 <python3.6>)
- C++学习:面向对象之继承
- js上拉加载
- poj 3311
- Date类型