实验五 图
一、 实验目的
1.熟悉图的邻接矩阵和邻接表的存储结构
2.熟悉图的邻接矩阵和邻接表的建立算法
3.掌握图的遍历算法
二、 实验内容
1.编写一个算法建立无向图的邻接矩阵,并且从不同的顶点出发,按深度优先搜索遍历。(文件夹:无向图邻接矩阵)
//图的邻接矩阵类型定义.h
const int n=8;
const int e=10;
typedef char vextype;
typedef int adjtype;
typedef struct
{
vextype vexs[n];
adjtype arcs[n][n];
}graph;
//建立无向图邻接矩阵.h
using namespace std;
extern graph * g;
void creatgraph()
{
int i,j,k;
cout<<"请输入"<<n<<"个结点的值(请勿用空格间隔,例如:ABCDEFGH):"<<endl;
for(i=0;i<n;i++)
g->vexs[i]=getchar();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
g->arcs[i][j]=0;
cout<<"请输入"<<e<<"条边(例如:0 1,数字之间用空白字符间隔):"<<endl;
for(k=0;k<e;k++)
{
cin>>i>>j;
g->arcs[i][j]=g->arcs[j][i]=1;
}
}
//深度优先搜索遍历.h
using namespace std;
extern graph * g;
extern int visited[n];
void dfsa( int v )
{
visited[v] = 1;
cout<<"Node:"<<g->vexs[v]<<endl;
for( int j = 0 ; j < n ; j++ )
{
if( g->arcs[v][j] == 1 && visited[j] != 1 )
dfsa(j);
}
}
//无向图邻接矩阵主程序文件.cpp
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include "图的邻接矩阵类型定义.h"
#include "建立无向图邻接矩阵.h"
#include "深度优先搜索遍历.h"
using namespace std;
graph*g=new graph;
int visited[n];
int main()
{
creatgraph();
int i;
while(1)
{
for(i=0;i<n;i++)
visited[i]=0;
cout<<"输入出发点序号(0-7),输入-1结束:";
cin>>i;
if(i==-1) break;
dfsa(i);
}
system("PAUSE");
return 0;
}
//
/*
输入格式:
ABCDEFGH
0 1
0 2
1 3
1 4
2 5
2 6
3 7
4 7
5 7
6 7
*/