69,374
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
typedef struct node {
int adjvex;
struct node *next;
}EdgeNode;
typedef struct {
EdgeNode *first;
}VertexNode;
typedef struct{
VertexNode adjlist[MAX];
}graph;
void string2ALGraph(char *array, int Vnum, graph **G){
int index,i=0,j=0;
int matrix[MAX][MAX];
char Relation[MAX];
EdgeNode *p;
int RelaLen=strlen(Relation);
while(*array != '\0'){
Relation[i]=*array;
array++;
}
for(index=0;index<RelaLen;index++){
index%Vnum==0?j=0:(i++,j++);
matrix[i][j] = Relation[index];
}
*G = (graph *) malloc(sizeof(graph));
for(i=0;i<Vnum;i++){
(*G)->adjlist[i].first=NULL;
}
for(i=0;i<Vnum;i++){
for(j=Vnum-1;j>=0;j--){
if(matrix[i][j] != 0){
p = (EdgeNode *) malloc(sizeof(EdgeNode));
p->adjvex=j;
p->next=(*G)->adjlist[i].first;
(*G)->adjlist[i].first=p;
}
}
}
}
int Find (graph *G, int NodeA, int NodeB, int MaxPathLength, int visited[], int path[], int d){
int i,node;
EdgeNode *r;
visited[NodeA] = 1;
d++;
path[d]=NodeA;
if(NodeA == NodeB && d <= MaxPathLength){
for(i=0;i<=d;i++){
if(i != d){
printf("%s\t",path[i]);
}
else{
printf("%s\n",path[i]);
}
}
}
r = G->adjlist[NodeA].first;
while(r != NULL){
node = r->adjvex;
if(visited[node] == 0){
Find(G,node,NodeB,MaxPathLength,visited,path,d);
}
r = r->next;
}
visited[NodeA] = 0;
d--;
return 0;
}
void main(int argc, char *argv[]) {
int path[MAX],visited[MAX],NodeA,NodeB,Vnum_i,MaxPathLength_i,i,j,k;
char Vnum[3],MaxPathLength[3];
graph *G;
strcpy(Vnum,argv[2]);
sscanf(Vnum, "%d", &Vnum_i );
strcpy(MaxPathLength,argv[3]);
sscanf(MaxPathLength, "%d", &MaxPathLength_i);
string2ALGraph(argv[1],Vnum_i,&G);
for(i=0;i<Vnum_i;i++){
for(j=i+1;j<Vnum_i;j++){
NodeA=i;
NodeB=j;
for(k=0;k<Vnum_i;k++){
visited[k]=0;
}
Find(G,NodeA,NodeB,MaxPathLength_i,visited,path,-1);
}
}
}