图结构
#include <stdio.h>
#define MAX 20
typedef struct Grap{
char v[ MAX] ;
int e[ MAX] [ MAX] ;
int vc, ec;
} G, * grap;
int visited[ MAX] ;
G * creat ( char a[ ] , int m, int n) {
G t1, * t;
t= & t1;
t-> vc = m;
t-> ec = n;
int i, j, k, value;
for ( i= 0 ; i< t-> vc; i++ ) t-> v[ i] = a[ i] ;
for ( i= 0 ; i< t-> vc; i++ ) {
for ( j= 0 ; j< t-> vc; j++ ) t-> e[ i] [ j] = 0 ;
}
for ( k= 0 ; k< t-> ec; k++ ) {
printf ( "输入边的两个顶点的序号():" ) ;
scanf ( "%d %d %d" , & i, & j, & value) ;
t-> e[ i] [ j] = value;
t-> e[ j] [ i] = value;
}
for ( i= 0 ; i< t-> vc; i++ ) {
for ( j= 0 ; j< t-> vc; j++ ) printf ( "%d " , t-> e[ i] [ j] ) ;
printf ( "\n" ) ;
}
return t;
}
void DFshow ( G * t, int n) {
int j;
printf ( "%d\n" , t-> vc) ;
if ( n>= t-> vc) {
printf ( "输入非法\n" ) ;
} else {
printf ( "%c " , t-> v[ n] ) ;
visited[ n] = 1 ;
for ( j= 0 ; j< t-> vc; j++ ) {
if ( t-> e[ n] [ j] > 0 && visited[ j] == 0 )
DFshow ( t, j) ;
}
}
}
void BFshow ( G * t, int n) {
int front = - 1 , rear = - 1 , j;
char Q[ MAX] ;
if ( n>= t-> vc) printf ( "输入非法\n" ) ;
else {
printf ( "%c" , t-> v[ n] ) ;
visited[ n] = 1 ;
Q[ ++ rear] = n;
while ( front != rear) {
n = Q[ ++ front] ;
for ( j= 0 ; j< t-> vc; j++ )
if ( t-> e[ n] [ j] > 0 && visited[ j] == 0 ) {
printf ( "%c " , t-> v[ j] ) ;
visited[ j] = 1 ;
Q[ ++ rear] = j;
}
}
}
}