图的深度与广度遍历
今天把图的遍历加强了下。。
图的深度遍历::
#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); } }
posted on 2011-04-15 19:43 more think, more gains 阅读(251) 评论(0) 编辑 收藏 举报