邻接矩阵 深度遍历
来源:互联网 发布:vb int函数的使用方法 编辑:程序博客网 时间:2024/05/16 10:21
建立无向图的不带权值的邻接矩阵,深度遍历简单路径
# include <iostream.h>
# include <stdio.h>
# include<string.h>
#define TRUE 1
#define FALSE 0
#define INFINITY INT_MAX /*最大值“无穷”*/
#define MAX_VERTEX_NUM 20 /*最大顶点个数*/
typedef int Boolean;
typedef char VertexType[20];
typedef int VRType,InfoType;
typedef struct ArcCell//定义无权值无向图
{
VRTypeadj; /*图中有1/0表示是否有边,网中表示边上的权值*/
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
VertexTypevexs[MAX_VERTEX_NUM];/*顶点向量*/
AdjMatrixarcs;/*邻接矩阵*/
intvexnum,arcnum; /*图中当前顶点数和边数*/
}MGraph;
int LocateVertex(MGraph G,VertexType v)/* 顶点在顶点向量中的定位*/
{
inti=0;
while((strcmp(v,G.vexs[i])!=0))
i++;
returni;
}
void GetArc(VertexType u,VertexType v)//输入一条弧<u,v>
{
cout<<"请输入一条弧:";
cin>>u>>v;
}
void CreateGraph(MGraph *&G)/*建立无向图的邻接矩阵*/
{
inti,j,k; //i,j,k为计数器
VertexTypev1,v2; //用于放置输入的弧的两个顶点
printf("请输入无向图G的顶点数,边数: \n");
cin>>G->vexnum>>G->arcnum;
cout<<endl;
cout<<"请输入"<<G->vexnum<<"个顶点的值(1个字符,空格隔开)"<<endl;
for(i=0;i<G->vexnum;i++)// 构造顶点向量
{
cin>>G->vexs[i];
}
for(i=0;i<G->vexnum;i++)// 初始化邻接矩阵
for(j=0;j<G->vexnum;j++)
{
G->arcs[i][j].adj=0;
}
cout<<"请输入"<<G->arcnum<<"条边(以空格作为间隔)"<<endl;
for(k=0;k<G->arcnum;k++)
{
GetArc(v1,v2);//每次输入一条弧
i=LocateVertex(*G,v1);
j=LocateVertex(*G,v2);
G->arcs[j][i].adj=1;
G->arcs[i][j].adj=G->arcs[j][i].adj;// 置<v1,v2>的对称弧<v2,v1>
}
}
void PrintGraph(MGraph *G)
{
inti,j;
cout<<"MGraph"<<endl;
for(i=0;i<G->vexnum;i++)
{
cout<<G->vexs[i];
for(j=0;j<G->vexnum;j++)
{
cout<<G->arcs[i][j].adj<<"";
}cout<<endl;
}
}
int FirstAdj(MGraph *&G,int v)/* 查找第1个邻接点 */
{
intj;
intp=-1;
for(j=0;j<G->vexnum;j++)
if(G->arcs[v][j].adj)
{p=j;break;
}
returnp;
}
int NextAdj(MGraph *&G,int v,int w)/* 查找下一个邻接点 */
{
intj;
intp=-1;
for(j=w+1;j<G->vexnum;j++)
if(G->arcs[v][j].adj)
{
p=j;break;
}
returnp;
}
Boolean visited[MAX_VERTEX_NUM];
void DFS(MGraph *&G,int v)
{
intw;
visited[v]=TRUE;
cout<<G->vexs[v];
for(w=FirstAdj(G,v);w>=0;w=NextAdj(G,v,w))
{
if(visited[w]==0)
DFS(G,w);
}
}
void DFSTraverse(MGraph *&G)
{
intv;
for(v=0;v<G->vexnum;v++)
visited[v]=FALSE;
for(v=0;v<G->vexnum;v++)
if(visited[v]==0)
DFS(G,v);
}
void main()
{
MGraph*G=new MGraph;
CreateGraph(G);
PrintGraph(G);
cout<<"G的简单路径为:";
DFSTraverse(G);
cout<<endl;
}
- 邻接矩阵深度优先遍历
- 邻接矩阵 深度遍历
- 邻接矩阵 深度广度遍历
- 图---邻接矩阵(建立,深度遍历,广度遍历)
- 图---邻接矩阵(建立,深度遍历,广度遍历)
- [算法]图(邻接矩阵)的深度遍历
- 图:广度深度优先遍历(邻接矩阵)
- 【数据结构】邻接矩阵深度和广度遍历DFS_BFS
- 邻接矩阵构造图,广度、深度遍历
- 邻接矩阵深度和广度遍历DFS_BFS.c
- 邻接矩阵存储结构,深度,广度遍历。
- 图的深度和广度遍历(邻接矩阵)
- 图深度优先遍历邻接矩阵表示
- java 图的深度遍历 邻接矩阵
- 数据结构-图-深度优先遍历邻接矩阵(1)
- 基于邻接矩阵的深度优先搜索遍历
- 图——邻接矩阵(深度遍历,广度遍历)
- 深度遍历和广度遍历,邻接表和邻接矩阵
- 转载 web缓存技术
- Matlab学习笔记四:三维绘图
- PHP/EasyUI学习笔记(一) easyui的机制的思考
- android 中 unable to start service 错误解决方法
- POJ3211 Washing Clothes
- 邻接矩阵 深度遍历
- 小明的调查作业
- 最近遇到的几个问题
- 美丽数
- python3.3.2中的内建函数,留个笔记
- 关于stm32的USB学习笔记之USB_HW.c
- HDU 2043 密码
- SQL server 配置连接数据源
- Java框架学习笔记——第一个Spring示例