Red de conocimiento informático - Conocimiento informático - Búsqueda primero en amplitud

Búsqueda primero en amplitud

#include

#include

#include

int visitado[20]={0};

typedef struct

{

char vexs[20];/*tabla de vértices*/

int bordes[20][20];

int n,e;

}Mgraph;

typedef estructura QNode

{

int datos;

struct QNode *next;

int Queusize;

}

QNode, *QueuePtr;//Definir el tipo de nodo de cola

typedef struct

{

QueuePtr front;

QueuePtr rear;

}

LinkQueue;//Tipo de cola

void InitQueue(LinkQueue *Q)//Crear cola

{

Q->front=Q->trasero=(QueuePtr)malloc(sizeof(QNode));

Q->front->next=NULL;

}

void EnQueue(LinkQueue *Q,int e)//Insertar elementos en la cola

{

QueuePtr p;

p=(QueuePtr )malloc(sizeof(QNode));

p->data=e;

p->next=NULL;

Q->trasero-> next=p;

Q->rear=p;

}

int DeQueue(LinkQueue *Q)//Quitar de la cola el elemento y devolver la Posición del elemento

{

int e;

QueuePtr p;

p=Q->front->siguiente;

e=p->datos;

Q->frontal->siguiente=p->siguiente;

if(Q->trasero==p)

Q->trasero=Q->delantero;

gratis(p);

retorno (e);

}

int QueueEmpty(LinkQueue *Q)//Determinar si la cola está vacía

{

if(Q->front==Q->rear )

devuelve 1;

else

devuelve 0;

}

void CreateMGraph(Mgraph *G)

{

int i,j,k;

printf("Ingrese el número de vértices y aristas\n");

scanf("%d %d", &G->n,&G->e);

getchar();

printf("Ingrese %d vértices\n", G ->n);

for(i=0;in; i++ )

G->vexs[i]=getchar();

para (i = 0;in; i++)

para (j = 0;j n; j++)

G- > bordes[i][j]=0;

printf("Ingrese %d elementos en la matriz:\n",2*(G->e));

para (k = 0;k<2*(G->e);k++)

{

scanf("%d%d",&i,&j);

G->bordes[i][j]=1;

}

}

void BFS(Mgraph G,int i )/ /Recorrido primero en amplitud

{

int u,j;

LinkQueue Q;

InitQueue(&Q);

printf("%c",G.vexs[i]);

visitó[i]=1;//marca

EnQueue(&Q,i) ;

while(!QueueEmpty(&Q))

{

i=DeQueue(&Q);

for(j=0 ; j

if(G.edges[i][j]==1&&!visited[j])

{ printf("%c",G . vexs[j]);

visitó[j]=1;

EnQueue(&Q,j);

}

}

}

void main()

{

Mgraph G;

CreateMGraph(&G); /p>

printf("Anchura:\n");

BFS(G,0);

}