现在的位置: 首页 > 综合 > 正文

图的深度与广度遍历

2013年06月14日 ⁄ 综合 ⁄ 共 1479字 ⁄ 字号 评论关闭

今天把图的遍历加强了下。。

图的深度遍历::

#include<stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<debug.h>
int visit[100],P[100];
struct N
{
int vex,num;
int maps[100][100];
}G;

typedef
struct node
{
int data;
node
*next;
}NODE;

typedef
struct Q
{
NODE
*pri;
NODE
*rear;
}QE;
QE
*p;
void init( )
{
p
=new QE;
p
->pri=p->rear=new NODE;
p
->rear->next=NULL;
}
void Enqueue(int x )
{
NODE
*l;
l
=new NODE;
l
->data=x;
l
->next=NULL;

// p->pri->next=l;
p->rear->next=l;
//printf("*************");
p->rear=l;

}

int Dequeue(int x )
{
NODE
*q;
q
=new NODE;
p
->pri=p->pri->next;
q
=p->pri;
x
=q->data;
p
->pri->next=q->next;
return x;
}
void BFS(int x )
{
visit[x]
=1;
int i,t;
for(i=1;i<=G.vex;i++)
{
if(G.maps[x][i]==1&&!visit[i] && i!=x && P[i]!=1 )
{
Enqueue(i);
P[i]
=1;
}
}
printf(
"del:%d\n",Dequeue(t));

if(p->pri->next!=NULL )
{
int k=p->pri->next->data;
if(!visit[k])
BFS(k);
}
}
int main( )
{
init( );
Debug();
int a,b,i;
scanf(
"%d%d",&G.vex,&G.num);
for(i=0;i<G.num;i++)
{
scanf(
"%d%d",&a,&b);
G.maps[a][b]
=G.maps[b][a]=1;
}
memset(visit,
0,sizeof(visit));
memset(P,
0,sizeof(P));
for(i=1;i<=G.vex;i++)
{
if(!visit[i])
{
Enqueue(i);

BFS(i);
// printf("**");
}
}
system(
"pause");
return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<debug.h>
const int inf=0x7fffffff;
int visit[100];
struct node
{
 int vex,num;
 int maps[100][100];
}G;
void DFS(int x)
{
  visit[x]=1;
  int i;
  printf("%d->",x);
  for(i=1;i<=G.num;i++)
  {
    if(G.maps[x][i]==1&&i!=x&&!visit[i])
    DFS(i);
  }
}
   
int main( )
{
    Debug();
    int a,b,i;
    
    scanf("%d%d",&G.vex,&G.num);
    for(i=0;i<G.vex;i++)
    {
    scanf("%d%d",&a,&b); 
    G.maps[a][b]=1;
    }
    memset(visit,0,sizeof(visit));
    for(i=1;i<=G.vex;i++)
    {
     if(!visit[i])
     DFS(i);
    } 
}
【上篇】
【下篇】

抱歉!评论已关闭.