Rabu, 20 Maret 2013

Program DFS

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
#define T 1
#define F 0
#define NULL 0
using namespace std;

struct edge
{
 int terminal;
 struct edge *next;
};
struct vertex
{
 int visit;
 int vertex_no;
 char info;
 int path_lenth;
 struct edge *edge_ptr;
};
void table(int,int matrix[SIZE][SIZE],struct vertex vert[SIZE]);
struct edge *insert_vertex(int,struct edge *);
void dfs(int ,int *dist,struct vertex vert[SIZE]);
void output(int,int a[SIZE][SIZE]);
void input(int,int a[SIZE][SIZE]);
struct edge *insert_vertex(int vertex_no,struct edge *first)
{
 struct edge *new1,*current ;
 new1=(struct edge*)malloc(sizeof(struct edge));
 new1->terminal=vertex_no;
 new1->next=NULL;
 if(!first)
   return new1;
 for(current=first;current->next;current=current->next);
 current->next=new1;
 return first;
}
void table(int vertex_num,int matrix[SIZE][SIZE],struct vertex vert[SIZE])
{
 int i,j;
 for(i=0;i<vertex_num;i++)
 {
  vert[i].visit=F;
  vert[i].vertex_no=i+1;
  vert[i].info='A'+i;
  vert[i].path_lenth=0;
  vert[i].edge_ptr=NULL;
 }
 for(i=0;i<vertex_num;i++)
   for(j=0;j<vertex_num;j++)
    if(matrix[i][j]>0)
     vert[i].edge_ptr=insert_vertex(j,vert[i].edge_ptr);
}
void dfs(int index,int *dist,struct vertex vert[SIZE])
{
 struct edge *link;
 vert[index].visit=T;
 vert[index].path_lenth= *dist;
 *dist+=1;
 for(link=vert[index].edge_ptr;link;link=link->next)
  if(vert[link->terminal].visit==F)
   dfs(link->terminal,dist,vert);
}
void input(int number,int a[SIZE][SIZE])
{
 int i,j;
 printf("input the adjacency matrix is:\n");
 for(i=0;i<number;i++)
 {
  for(j=0;j<number;j++)
   scanf("%d",&a[i][j]);
  printf("\n");
 }
}
void output(int number,int a[SIZE][SIZE])
{
 int i,j;
 printf("\n adjacency matrix is:\n");
 for(i=0;i<number;i++)
 {
  for(j=0;j<number;j++)
   printf("%d\t",a[i][j]);
  printf("\n");
 }
}
int main()
{
 int i,number,index,dist,a[SIZE][SIZE];
 struct vertex vert[SIZE];
 struct edge *list;

 printf("\ninput the number of vertices in graph:");
 scanf("%d",&number);
 input(number,a);
 output(number,a);
 table(number,a,vert);
 printf("\ninput the strating vertex 0-%d:",number-1);
 scanf("%d",&index);
 dist=0;
 dfs(index,&dist,vert);
 printf("\npath lenth of thevertex %c",vert[index].info);
 printf("\nvertex lenth   vertex complexity\n");
 for(i=0;i<number;i++)
 {
  printf("\n%c\t\t%d",vert[i].info,vert[i].path_lenth);
  for(list=vert[i].edge_ptr;list;list=list->next)
  {
    printf(" ");
    putchar(list->terminal+'A');
  }
 }
 getch();
}


Tidak ada komentar:

Posting Komentar