深度优先搜索遍历
来源:互联网 发布:希腊方阵知乎 编辑:程序博客网 时间:2024/05/07 09:32
问题:
把一个文件中的数据,读取到一个二维数组中,这个文件中的数据如下:
1 2
1 3
1 4
4 5
说明这是一个无向图,顶点1连接顶点2,顶点1连接顶点3…
将这些数据以无向图邻接矩阵的形式读取并存储,并用深度优先搜索遍历所有顶点并输出。(从给出的数据的第一行的第一各顶点开始进行遍历)
源程序:
#include<iostream>
#include<fstream>
#include<list>
using namespace std;
list<int>lst;
list<int>::iterator p=lst.begin();
ifstream stream("input.txt");
#define MAX_VERTEX_NUM 20 /* 最大顶点个数 */
struct arc
{
int adj; /* 顶点关系类型。对无权图,用1(是)或0(否)表示相邻否; */
};
struct MGraph
{
int vexs[MAX_VERTEX_NUM]; /* 顶点向量 */
arc arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];; /* 邻接矩阵 */
int vexnum,arcnum; /* 图的当前顶点数和弧数 */
};
bool visited[MAX_VERTEX_NUM]; /* 访问标志数组(全局量) */
void dfs (MGraph &G,int i) // 从顶点i 出发遍历
{ int j;
//输出访问顶点
visited[i]=1; //全局数组访问标记置1表示已经访问
cout<<G.vexs[i]<<endl;
for(j=1; j<=G.vexnum; j++)
{ if ((G.arcs[i][j].adj==1)&&(!visited[j])){ dfs(G,j); }
}
}
void CreateAG(MGraph &G)
{ /* 采用数组(邻接矩阵)表示法,由文件构造没有相关信息的无向图G */
int i,j;
G.arcnum=0;
G.vexnum=0;
stream.open("input.txt");
while(!stream.eof())
{
stream>>i>>j;
G.arcs[i][j].adj=G.arcs[j][i].adj=1; /* 无向图 */
G.arcnum++;
lst.push_back(i);
lst.push_back(j);
}
stream.close();
lst.sort();
lst.unique();
G.vexnum=lst.size();
list<int>::iterator p=lst.begin();
for(int m=1;m<=lst.size();m++)
{
G.vexs[m]=*p;
p++;
}
}
void main()
{ int firstver;
stream>>firstver;
stream.close();
MGraph G;
CreateAG(G);
dfs(G,firstver);
}
- 深度优先搜索遍历
- DFS深度优先搜索遍历
- 深度优先搜索遍历与广度优先搜索遍历
- 图的遍历 深度优先搜索 广度优先搜索
- 图的遍历-深度优先搜索
- 深度优先搜索(图的遍历)
- 图的遍历 之 深度优先搜索
- 图的深度优先遍历搜索
- 深度优先遍历(搜索)(DFS)
- 图遍历之深度优先搜索
- 图的遍历---深度优先搜索(DFS)
- 图的遍历之深度优先搜索
- hdu 1181 深度优先搜索遍历
- DFS(深度优先遍历搜索解析)
- 深度优先搜索——DFS遍历
- 【数据结构】图的遍历--深度优先搜索
- 图的深度优先搜索遍历
- 图的遍历(深度优先搜索)
- QT安装(4.4.1+VC2005Team版)
- 关于一些算法介绍的网址
- 赛程生成算法
- 一个程序员的爱情表白
- poj 3544 Journey with Pigs(简单的贪心)
- 深度优先搜索遍历
- 当一棵大树
- 通过定义接口来实现API无关 P34
- Weka学习四(属性选择)
- 评鲁能对申花4月3号
- 简单排序
- 我的大学生活7
- 6.11编程练习
- 基于子树广度的Web信息抽取