//构造邻接表,深度优先搜索
#include<iostream>
#include<malloc.h>
#define null NULL
using namespace std;
typedef struct nd
{
int key;
struct nd * next;
}node;
typedef struct ndl
{
int count;
node * first;
}nodelist;
int n=6;
nodelist nl[10];
int color[10]={0};//0=white,1=gray,2=black
void DFS(int i)
{
color[i]=1;
cout<<i<<' ';
node *p=nl[i].first;
while(p!=null)
{
if(color[p->key]==0)
{
color[p->key]=1;
DFS(p->key);
}
p=p->next;
}
color[i]=2;
}
int main()
{
for(int i=1;i<=n;i++)
{
nl[i].count=0;
}
//构造邻接表
nl[1].count=2;
node * n12=(node *)malloc(sizeof(node));
n12->key=2;
n12->next=null;
node *n14=(node *)malloc(sizeof(node));
n14->key=4;
n14->next=null;
nl[2].count=5;
node *n25=(node *)malloc(sizeof(node));
n25->key=5;
n25->next=null;
nl[3].count=2;
node *n36=(node *)malloc(sizeof(node));
n36->key=6;
n36->next=null;
node *n35=(node *)malloc(sizeof(node));
n35->key=5;
n35->next=null;
nl[4].count=1;
node *n42=(node *)malloc(sizeof(node));
n42->key=2;
n42->next=null;
nl[5].count=1;
node *n54=(node *)malloc(sizeof(node));
n54->key=4;
n54->next=null;
nl[6].count=1;
node *n66=(node *)malloc(sizeof(node));
n66->key=6;
n66->next=null;
nl[1].first=n12;
n12->next=n14;
nl[2].first=n25;
nl[3].first=n36;
n36->next=n35;
nl[4].first=n42;
nl[5].first=n54;
nl[6].first=n66;
for(int i=1;i<=6;i++)
{
if(color[i]==0)
DFS(i);
}
return 0;
}
图的深度搜索完整实现(邻接表,DFS)
最新推荐文章于 2023-10-13 14:38:32 发布