char filename[50]; Tree *tree=NULL; Node start,end;
Paths *paths=NULL,*p=NULL; Brother *path=NULL; Status flag=FALSE;
printf(\请输入树文件的文件路径:\\n\scanf(\
if((tree=CreatTree(tree,filename))==NULL)//打开文件失败 { }
printf(\您导入的树所有节点如下:\PutAllNode(tree); printf(\请输入起点:\scanf(\printf(\请输入终点:\scanf(\
flag=SearchPath(tree,start,end,&path); if(paths!=NULL) { }
printf(\从起点 %s 到终点 %s ,Status= %d \\n\printf(\路径是:\if(flag==TRUE) { } else { }
printf(\
45
return 0;
flag=TRUE;
path=RevPath(path); PutPath(path);
printf(\无\\n\
}
附录四:
流程图:
#include
#define NAMESIZE 30 //节点名称大小 #define TRUE 1 #define FALSE 0
46
typedef int Status;//定义标识符,表示真或假 typedef char Node[NAMESIZE]; typedef struct NEIGHBORNODE {
Node node;//相邻节点名称
struct NEIGHBORNODE *next;//下一个节点指针
} NEIGHBOR;//重命名相邻节点类型
typedef NEIGHBOR Stack;//相邻节点类型堆栈 typedef NEIGHBOR Path;//相邻节点类型路径
typedef struct GRAPHNODE {
typedef struct PATH//路径结构体 {
NEIGHBOR *AddABrother(NEIGHBOR *br,Node node)//在br兄弟节点群中增加一个兄弟节点node {
NEIGHBOR *b1,*b2;
b1=(NEIGHBOR *)malloc(sizeof(NEIGHBOR));//动态开辟空间 strcpy(b1->node,node);//赋值 b1->next=NULL;//初始化
if(br==NULL) //之前没有兄弟 node就是第一个兄弟节点 { }
else//之前有兄弟节点 node就是最后一个兄弟节点
47
Node node;//节点名称 NEIGHBOR *children;//相邻节点
struct GRAPHNODE *next;//下一个节点指针
} GRAPH;//重命名图类型
Path *path; struct PATH *next;
}Paths;//重命名路径结构体
br=b1;
}
{ }
return br;//返回兄弟节点指针
b2=br; while(b2->next) { }
b2->next=b1;
b2=b2->next;
GRAPH *Form_Pa_Ch(Node pa,NEIGHBOR *br)//双亲节点和兄弟节点构成子图 { }
GRAPH *AddParentToTree(GRAPH *tree,GRAPH *parent)//双亲节点加入到图中 {
GRAPH *t=tree;//临时图 if(t==NULL) //图不存在 { }
else//图存在 {
while(t->next) { }
t->next=parent;//带兄弟节点的双亲节点加入到图的最后
48
GRAPH *parent;
parent=(GRAPH *)malloc(sizeof(GRAPH));//动态开辟空间 strcpy(parent->node,pa);//赋值
parent->children=br;//兄弟节点和双亲节点构成子图 parent->next=NULL;
return parent;//返回带兄弟节点的双亲结点,即子图
tree=parent;//带兄弟节点的双亲节点 即图
t=t->next;
}
}
return tree;//返回图指针
NEIGHBOR *ClearBrothers(NEIGHBOR *br)//回收兄弟节点空间(删除兄弟节点) { }
GRAPH *ClearGraph(GRAPH *tree)//回收图空间 { }
void CreateStr(char *str)//文本字符数组转换为多个字符串 {
char *s=str;//临时字符串 while(*s) {
if(*s=='/') //如果是'/',化为字符串结束标记'\\0' {
49
NEIGHBOR *b=br;//临时兄弟节点 while(br) { }
return br;//返回NULL
b=br; br=br->next; free(b);//回收空间
GRAPH *tr=tree;//临时图 while(tree) { }
return tree;//返回NULL
tr=tree; tree=tree->next; free(tr);//回收空间