顺序表查找算法的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法与数据结构讲义实验五图的建立及遍历操作
一、实验目的
1.掌握图的存储结构和相关操作。
2.能够熟练用计算机来表示图和进行图处理。
二、实验环境
1.硬件:每个学生需配备计算机一台。操作系统:DOS或Windows;
2.软件:DOS或Windows操作系统+Turbo C;
三、实验要求 1.要求对于给定的图分别用邻接矩阵和邻接表示来存储。
2.对于存储好的图进行深度和广度优先遍历。
3.完成图的各种操作。
四、实验内容
1.现在某网络公司的光纤连接结点如下图所示,请分别用邻接矩阵和邻接表将图存储到计算机中方便进行处理。
2.现在某网络公司的光纤连接结点如下图所示,请分别用邻接矩阵和邻接表将图存储到计算机中方便进行处理。
五、代码如下
第一个实验
#include
#include
using namespace std;
#define MAX 20
typedef int Adj[MAX][MAX];
typedef struct{
string vexs[MAX]; //顶点表
Adj arcs; //邻接矩阵
int vexnum,arcnum; //图的顶点和弧数}MGraph;
int ylx_LocateVex(MGraph &G,string u);
int ylx_CreateUDN(MGraph &G){
int i,k,j;string v1,v2;
cout<<"请输入顶点数、弧数:";
cin>>G.vexnum>>G.arcnum;
cout<<"输入顶点:";
for(i=0;i cin>>G.vexs[i]; //构造顶点数} for(i=0;i for(j=0;j G.arcs[i][j]=0; } } for(k=0;k cout<<"输入第"< cin>>v1>>v2; i=ylx_LocateVex(G,v1); j=ylx_LocateVex(G,v2); G.arcs[i][j]=1; G.arcs[j][i]=1; //置 } return 0;} int ylx_LocateVex(MGraph &G,string u){ //确定u在G中序号 int i; for (i=0;i if (u==G.vexs[i]) return i; } if (i==G.vexnum){ cout<<"Error u!"< exit(1); } return 0;} void ylx_ShowG(MGraph &G){ int i,j; for(i=0;i cout< cout< for(i=0;i for(j=0;j cout< } cout< main(){MGraph A; int a; a=ylx_CreateUDN(A); ylx_ShowG(A);} 第二个实验 #include # include # include # include using namespace std; int visited[30]; # define MAX_VERTEX_NUM 30 # define OK 1 //typedef int VertexType; typedef int InfoType; typedef struct ArcNode //弧 { int adjvex; struct ArcNode *nextarc; }ArcNode; typedef struct VNode//表头 { int data; ArcNode *firstarc; }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct//图 { AdjList vertices; int vexnum,arcnum; int kind; }ALGraph; void ylx_CreateDG(ALGraph &G) { int k,i,v1; cout< cin>>G.vexnum; cout<<"请输入弧的个数: "; cin>>G.arcnum; for(i=1;i<=G.vexnum;i++)//初使化表头 { G.vertices[i].data=i; G.vertices[i].firstarc=NULL; } for(k=1;k<=G.vexnum;k++) //输入边 { int v2; cout<<"请输入与结点"< cin>>v2; cout<<"请输入与第"< cin>>v1; ArcNode *p; p=(ArcNode*)malloc(sizeof(ArcNode)); if(!p) exit(-1); p->adjvex=v1; p->nextarc=NULL; G.vertices[k].firstarc=p; for(int i=1;i { int m; cout<<"请输入与第"< cin>>m; ArcNode *q; q=(ArcNode *)malloc(sizeof(ArcNode));//动态指针 if(!q) exit(-1); q->adjvex=m; //顶点给P q->nextarc=NULL; p->nextarc=q; p=q; //free(q); } //free(p); } } void ylx_DFS (ALGraph G,int v )//深度搜索{visited[v]=1; cout< ArcNode *x; x=(ArcNode*)malloc(sizeof(ArcNode)); if(!x) exit(-1); x=G.vertices[v].firstarc; int w; for (;x;x=x->nextarc) { w=x->adjvex; if(visited[w]==0) ylx_DFS(G,w); } } void ylx_DFSB (ALGraph G,int v)//深度搜索的