您的位置:首页 > 其它

深度优先遍历DFS

2016-12-17 10:24 369 查看

//邻接数组表示法

#include<iostream>
#include<cstdlib>
#define MAX 5
#define QueueNum 10
using namespace std;

struct Node
{
int vertex;
struct Node* next;
};
typedef struct Node* Graph;
Node Head[MAX];
int flag = 0;   //0为无向图 1为有向图
int visited[MAX] = { 0 };//标记是否访问过

void DFS(int vertex)
{
Graph pointer=Head[vertex].next;
cout<<vertex<<"->";
visited[vertex]=1;
while(pointer!=NULL)
{
if(visited[pointer->vertex]==0)
DFS(pointer->vertex);
pointer=pointer->next;
}
}

void init()
{
int i;
for (i = 0; i<MAX; i++)
{
Head[i].vertex = i;
Head[i].next = NULL;
}
}

void printGraph()
{
Graph pointer;
int i;
for (i = 0; i<MAX; i++)
{
pointer = &(Head[i]);
cout << '[' << i << ']';
while (pointer->next != NULL)
{
pointer = pointer->next;
cout << "->[" << pointer->vertex << ']';
}
cout << endl;
}
}

void GreatGraph(int start, int end)
{
Graph New = (Graph)malloc(sizeof(struct Node));
Graph pointer;
if (New != NULL)
{
New->vertex = end;
New->next = NULL;
pointer = &(Head[start]);
while (pointer->next != NULL)
pointer = pointer->next;
pointer->next = New;
if (flag == 0)
{
New = (Graph)malloc(sizeof(struct Node));
New->vertex = start;
New->next = NULL;
pointer = &(Head[end]);
while (pointer->next != NULL)
pointer = pointer->next;
pointer->next = New;

}
}
}

int main(void)
{
int start, end, n, i,begin;
init();
cout << "请输入(0:无向图 1:有向图):";
cin >> flag;
cout << "请输入要添加的边数:";
cin >> n;
for (i = 1; i <= n; i++)
{
cin >> start >> end;
GreatGraph(start, end);
}
cout<<"请输入开始遍历的结点:";
cin>>begin;
DFS(begin);
//	printGraph();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: