图邻接矩阵的c语言实现 graph_adj_matrix.cpp
来源:互联网 发布:数组java99乘法表 编辑:程序博客网 时间:2024/05/17 22:14
gra_adj_matrix.cpp 文件
#include <iostream>#include <stdlib.h>#include <limits.h>using namespace std;#define Vertex_MAX 15#define Edge_MAX 15*(15-1)typedef int elemtype;//typedef float elemtype;int Vertex_n = 0;int Edge_n = 0;struct graph{ elemtype V[Vertex_MAX+1]; //顶点 elemtype arcs[Vertex_MAX+1][Vertex_MAX+1]; //边(i,j)};//访问标志位char visited[Vertex_MAX+1] = {0};//建立无向图邻接矩阵void UDcreatadj_matrix(graph& g){ int i,j,k; //输入顶点个数和边的个数 printf("请输入顶点个数:"); cin>>Vertex_n; printf("请输入边的个数:"); cin>>Edge_n; //输入顶点信息 for (k = 1; k <= Vertex_n; k++) { printf("请输入%d个顶点,第%d个顶点: ",Vertex_n,k); cin>>g.V[k]; } //矩阵初始化 for (i = 1; i <= Vertex_n; i ++) { for (j = 1; j <= Vertex_n; j++ ) { g.arcs[i][j] = 0; } } //输入边(i,j) for (k = 1; k <= Edge_n; k++) { printf("请输入%d个边,第%d个边(i j): ",Edge_n,k); cin>>i>>j; g.arcs[i][j] = 1; g.arcs[j][i] = 1; } //输出矩阵 for (i = 1; i <= Vertex_n; i ++) { for (j = 1; j <= Vertex_n; j++ ) { printf("%d ",g.arcs[i][j]); } printf("\n"); }}//邻接矩阵存储,深度优先搜索算法,无向图连通图,遍历顶点void UDdfs_adj_matrix(graph& g , int onevertex,int vertex_n){ int j; cout<<g.V[onevertex]<<endl; //第一个要访问的顶点 visited[onevertex] = 1; //标志置1 for (j = 1; j<= vertex_n; j++) { if (g.arcs[onevertex][j] == 1 && !visited[j]) //存在边关系的顶点 { //cout<<onevertex<<" "<<j<<endl; //有问题 UDdfs_adj_matrix(g,j,vertex_n); } }}//连通图和非连通图,深度搜索算法void UDdfs_all_adj_matrix(graph& g , int vertex_n){ for (int kk = 1; kk <= vertex_n; kk ++ ) { if (!visited[kk]) { UDdfs_adj_matrix(g , kk , vertex_n);//所有顶点都作为起点遍历 } }}//邻接矩阵存储,广度优先搜索算法,无向图连通图,遍历顶点void UDbfs_adj_matrix(graph& g , int onevertex,int vertex_n){ //int Q[Vertex_MAX + 1]; int *Q = new int[vertex_n + 1]; //Q为队列 memset(Q,0,sizeof(int)*(vertex_n + 1)); int f , r, j; //f,r分别为队列头,尾指针 f = r = 0; cout<<g.V[onevertex]<<endl; //输出访问顶点 visited[onevertex] = 1; //标志已经访问过 r++; Q[r] = onevertex; //入队列 while(f < r) { f++; onevertex = Q[f]; //出队列 for (j=1; j<=vertex_n; j++) { if ((g.arcs[onevertex][j] == 1) && (!visited[j])) { cout<<g.V[j]<<endl; visited[j] = 1; r++; Q[r] = j; } } } if (Q != NULL) { delete [] Q; Q = NULL; }}//连通图和非连通图,广度搜索算法void UDbfs_all_adj_matrix(graph& g , int vertex_n){ for (int kk = 1; kk <= vertex_n; kk ++ ) { if (!visited[kk]) { UDbfs_adj_matrix(g ,kk,vertex_n); } }}//建立有向图邻接矩阵void Dcreateadj_matrix(graph& g){ int i , j, k; //输入顶点个数和边的个数 printf("请输入顶点个数:"); cin>>Vertex_n; printf("请输入边的个数:"); cin>>Edge_n; //输入顶点信息 for (i = 1; i <= Vertex_n; i ++) { printf("请输入%d个顶点,第%d个顶点: ",Vertex_n,i); cin>>g.V[i]; } //矩阵初始化 for (i = 1; i <= Vertex_n; i ++) { for (j = 1; j <= Vertex_n; j++) { g.arcs[i][j] = 0; } } //输入弧 for (k = 1; k <= Edge_n; k++) { printf("请输入%d个边,第%d个弧(i j): ",Edge_n,k); cin>>i>>j; g.arcs[i][j] = 1; } //输出矩阵 for (i = 1; i <= Vertex_n; i ++) { for (j = 1; j <= Vertex_n; j++ ) { printf("%d ", g.arcs[i][j]); } printf("\n"); }}//建立无向网的邻接矩阵void UDNetcreatadj_matrix(graph& g){ int i,j,k; //权值 int w; //输入顶点个数和边的个数 printf("请输入顶点个数:"); cin>>Vertex_n; printf("请输入边的个数:"); cin>>Edge_n; //输入顶点信息 for (k = 1; k <= Vertex_n; k++) { printf("请输入%d个顶点,第%d个顶点: ",Vertex_n,k); cin>>g.V[k]; } //矩阵初始化 for (i = 1; i <= Vertex_n; i ++) { for (j = 1; j <= Vertex_n; j++ ) { if (i == j) { g.arcs[i][j] = 0; } else g.arcs[i][j] = 65536; //此处应该是无穷大 } } //输入边(i,j)及权值 for (k = 1; k <= Edge_n; k++) { printf("请输入%d个边,第%d个边和权值(i j w): ",Edge_n,k); cin>>i>>j>>w; g.arcs[i][j] = w; g.arcs[j][i] = w; } //输出矩阵 for (i = 1; i <= Vertex_n; i ++) { for (j = 1; j <= Vertex_n; j++ ) { printf("%d ",g.arcs[i][j]); } printf("\n"); }}int main(){ graph g; UDcreatadj_matrix(g); //Dcreateadj_matrix(g); //UDNetcreatadj_matrix(g); UDdfs_adj_matrix(g, 1,Vertex_n); //UDbfs_adj_matrix(g,1,Vertex_n); system("pause"); return 0;}
good luck !
阅读全文
1 0
- 图邻接矩阵的c语言实现 graph_adj_matrix.cpp
- 图的邻接矩阵(C语言实现)
- C语言邻接矩阵的实现
- C语言实现邻接矩阵
- 图的邻接矩阵的建立(C语言实现)
- 图的邻接矩阵存储(C语言实现)
- C语言实现图的邻接矩阵和BFS DFS
- c语言实现图的基本操作--邻接矩阵存储
- [数据结构]图邻接矩阵C语言简单实现
- 图的邻接矩阵(C语言)
- 基于邻接矩阵的Prim算法(C语言实现)
- Prim算法的C语言实现(邻接矩阵)
- c语言:图的邻接矩阵的建立与广度优先搜索实现
- [数据结构]图基于邻接矩阵的BFS与DFS的C语言简单实现
- 图的邻接矩阵存储 深度优先遍历 广度优先遍历 C语言实现
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
- C语言实现图的邻接矩阵存储结构及深度优先遍历和广度优先遍历
- C语言数据结构之图的邻接矩阵的应用实例
- android里序列化和反序列化的综合分析
- Android H.265硬解码&EasyPlayerPro
- NYOJ-诡异的电梯【Ⅰ】-(动态规划)
- HTML 表单4
- python 第二章 快速入门
- 图邻接矩阵的c语言实现 graph_adj_matrix.cpp
- react-navigation之TabNavigator, StackNavigator使用配合redux
- HDFS分布式文件系统架构
- mavean项目启动 停止在 Initializing Spring root WebApplicationContext
- 解析C语言结构体,位段。
- 嵌入式面试问题(1)——HelloWorld
- Mysql基础—对数据库和表的基本操作
- 单片机实验七
- makefile 笔记