深度算法源程序

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;

#define MaxVnum 50
typedef double A_Matrix[MaxVnum][MaxVnum];
typedef struct{
int vexnum,arcnum;
A_Matrix arcs;
}Graph;

int v = 0;

//为了方便,我们直接手动实现地图矩阵的加载
void CreateGraph(Graph &G)
{
G.vexnum=8;
G.arcnum=9;
G.arcs[0][1]=1;
G.arcs[0][2]=1;
G.arcs[1][3]=1;
G.arcs[1][4]=1;
G.arcs[2][5]=1;
G.arcs[2][6]=1;
G.arcs[3][1]=1;
G.arcs[3][7]=1;
G.arcs[3][6]=1;
G.arcs[4][1]=1;
G.arcs[4][7]=1;
G.arcs[5][2]=1;
G.arcs[5][6]=1;
G.arcs[5][5]=1;
G.arcs[6][2]=1;
G.arcs[6][5]=1;
G.arcs[7][3]=1;
G.arcs[7][4]=1;
}

bool tag[MaxVnum]; //标记一个点是不是已经被访问过了
void DFS(Graph G,int v)
{
tag[v] = true; //从V开始访问,tag它
cout << v << endl; //打印出V
for(int i = 0;i < G.vexnum;i++){
if(G.arcs[v][i] == 1 && tag[i] == false){//这里可以获得V未访问过的邻接点
DFS(G,i);//递归调用,如果所有节点都被访问过,就回溯,而不再调用这里的DFS
}
}
}

void DFSTraverse(Graph G){
for(v = 0;v < G.vexnum;v++){
tag[v] = false; //刚开始都没有被访问过
}
for(v = 0;v < G.vexnum;++v){
if(tag[v] == false) //从没有访问过的第一个元素来遍历图
DFS(G,v);
}
}

int main()
{
Graph G;
CreateGraph(G);
DFSTraverse(G);
return 0;
}

 

posted @ 2018-03-03 16:04  陈焕彪  阅读(339)  评论(0编辑  收藏  举报