2017-07-25 15:38:00

writer:pprp

在前一篇图基于邻接列表表示法的代码加了一小部分,加了一个DFS函数,visited[N]数组

参考书目:张新华的《算法竞赛宝典》



代码如下:


#include <iostream>

using namespace std;

const int N = 9;

int visited[N] = {0}; //新引入一个数组,用于标记是否访问过

struct node
{
int vertex;
node*next;
};

node head[N];
void create(int node1,int node2)//通过起点和终点的值创建一个邻接表
{
node * point;
node * New = new node();
if(New!=NULL)
{
New->vertex = node2;
New->next = NULL;
point = &(head[node1]);
while(point->next!=NULL)
point = point->next;
point->next = New;
}
}

void DFS(int vertex)
{
node*point;
visited[vertex] = 1;
cout <<"["<<vertex<<"]->";
point = head[vertex].next;
while(point!=NULL)
{
if(visited[point->vertex]==0)
DFS(point->vertex);
point = point->next;
}
}

void print()
{
node*point;
for(int i = 0; i < N; i++)
{
point = head[i].next;
cout << "Head["<<i<<"]";
while(point!=NULL)
{
cout <<"-> "<<point->vertex;
point = point->next;
}
cout << endl;
}
}

int main()
{
int node1,node2;

for(int i = 0; i < N; i++)
{
head[i].vertex = i;
head[i].next = NULL;
}
while(1)
{
cout <<"please enter the start point" << endl;

cin >> node1;
if(node1 == -1)
break;
cout <<"please enter the end point" << endl;
cin >> node2;

if(node1 == node2)
cout <<"自身循环"<<endl;
else if(node1>=N||node2>=N)
cout <<"超出范围"<<endl;
else
create(node1,node2);
}

cout << "邻接表为:" << endl;
print();

DFS(1);

cout <<"\n"<<endl;

return 0;
}




代码改变世界