int main(){ ALGrapth G; int i, j; CreateGraph(&G); printGraph(G); printf("从顶点1开始深度优先遍历序列"); DFSTraverse(G, printVex); printf("\n"); printf("从顶点7开始深度优先遍历序列"); DFSTraverse(G, printVex, 6); printf("\n"); printf("从顶点1开始广度优先遍历序列"); BFSTraverse(G, printVex); printf("\n"); printf("从顶点7开始广度优先遍历序列"); BFSTraverse(G, printVex, 6); printf("\n"); printf("\n"); return 0; }
int main() { ALGraph g; CreateGraph(&g); DFSTraverse(g,print); return 1; }
void main() { int k,n; AMLGraph g; VertexType v1,v2; CreateGraph(&g); Display(g); printf("修改顶点的值,请输入原值 新值: "); scanf("%s%s",v1,v2); PutVex(&g,v1,v2); printf("插入新顶点,请输入顶点的值: "); scanf("%s",v1); InsertVex(&g,v1); printf("插入与新顶点有关的边,请输入边数: "); scanf("%d",&n); for(k=0;k<n;k++) { printf("请输入另一顶点的值: "); scanf("%s",v2); InsertArc(&g,v1,v2); } Display(g); printf("深度优先搜索的结果:\n"); DFSTraverse(g,visit); printf("广度优先搜索的结果:\n"); BFSTraverse(g,visit); DestroyGraph(&g); }
int main(void) { MGraph G; CreateMGraph(&G); printf("\n深度遍历:"); DFSTraverse(G); printf("\n广度遍历:"); BFSTraverse(G); return 0; }
int main() { ALGraph G; CreateGraph(&G); printf("DFS\n"); DFSTraverse(G); printf("\n"); printf("BFS\n"); BFSTraverse(G); return 0; }
void main() { MGraph G; printf("create\n"); if(CreateUDG(G)) { printf("output DFS\n"); DFSTraverse(G); printf("output BFS\n" ); BFSTraverse(G,Visit); } }
void main() { int i,j,k,n; VertexType v1,v2; MGraph g; CreateFAG(&g); Display(g); printf("修改顶点的值,请输入原值 新值: "); scanf("%s%s",v1,v2); PutVex(&g,v1,v2); printf("深度优先搜索的结果:\n"); DFSTraverse(g,visit); printf("广度优先搜索的结果:\n"); BFSTraverse(g,visit); printf("删除一条边或弧,请输入待删除边或弧的弧尾 弧头:"); scanf("%s%s",v1,v2); DeleteArc(&g,v1,v2); Display(g); DestroyGraph(&g); printf("请顺序选择有向图,有向网,无向图,无向网\n"); for(i=0;i<4;i++) /* 验证4种情况 */ { CreateGraph(&g); Display(g); printf("插入新顶点,请输入顶点的值: "); scanf("%s",v1); InsertVex(&g,v1); printf("插入与新顶点有关的弧或边,请输入弧或边数: "); scanf("%d",&n); for(k=0;k<n;k++) { printf("请输入另一顶点的值: "); scanf("%s",v2); if(g.kind<=1) /* 有向 */ { printf("对于有向图或网,请输入另一顶点的方向(0:弧头 1:弧尾): "); scanf("%d",&j); if(j) InsertArc(&g,v2,v1); else InsertArc(&g,v1,v2); } else /* 无向 */ InsertArc(&g,v1,v2); } Display(g); printf("删除顶点及相关的弧或边,请输入顶点的值: "); scanf("%s",v1); DeleteVex(&g,v1); Display(g); DestroyGraph(&g); } }
void main() { Graph* pG; // 自定义"图"(输入矩阵队列) //pG = create_graph(); // 采用已有的"图" pG = create_example_graph(); print_graph(*pG); // 打印图 DFSTraverse(*pG); // 深度优先遍历 BFS(*pG); // 广度优先遍历 }
void main() { ALGraph g; CreateGraphF(g); // 利用数据文件创建无向图,在bo7-2.cpp中 Display(g); // 输出无向图,在bo7-2.cpp中 printf("深度优先搜索的结果:\n"); DFSTraverse(g,visit); // 调用算法7.4,在bo7-2.cpp中 DFSTraverse1(g,visit); // 另一种方法,在bo7-2.cpp中 printf("广度优先搜索的结果:\n"); BFSTraverse(g,visit); // 调用算法7.6,在bo7-2.cpp中 BFSTraverse1(g,visit); // 另一种方法,在bo7-2.cpp中 DestroyGraph(g); // 销毁图g }
int main() { graph *g = (graph*)malloc(sizeof(graph)); createAMGraph(g); printf("DFS递归遍历结果:\n"); DFSTraverse(g); printf("\nDFS非递归遍历结果:\n"); DFSNonRecurTraverse(g, print); printf("\nBFS遍历结果:\n"); BFSTraverse(g, print); free(g); g = NULL; return 0; }
void main() { LGraph* pG; // 自定义"图"(自己输入数据) //pG = create_lgraph(); // 采用已有的"图" pG = create_example_lgraph(); // 打印图 print_lgraph(*pG); DFSTraverse(*pG); BFS(*pG); }
int main() { VertexType v,w; MGraph G; CreateUDN(G); PrintVex(G); printf("获取v的邻接点w后面的一个邻接点:\n"); scanf("%d%d",&v,&w); if(NextAdjVex(G,v,w)!=ERROR) printf("%d\n",NextAdjVex(G,v,w)); PrintVex(G); DFSTraverse(G,Visit); return 0; }
void main() { AdjGraph G; IniADJGraph(&G); VertexData v[5]={'a', 'b', 'c', 'd', 'e'}; EdgeData e[5][NumVertices]={{0, 1, 0, 1, 0}, {1, 0, 1, 1, 0}, {0, 1, 0, 1, 0}, {1, 1, 1, 0, 1}, {0, 0, 0, 1, 0}}; CreateADJGraph(&G, v, e, 5); DFSTraverse(G); cout<<endl; }
void DFSTraverse(AdjBoxPtr A, int start_point) { PointNodePtr tar_point; for (tar_point = A->first; tar_point->point_id != start_point; tar_point = tar_point->next); printf("%d -> ", tar_point->point_id); visted[tar_point->point_id] = 1; NeighborNodePtr tar_nei = tar_point->first; int w = tar_nei->point_id; while (tar_nei != NULL) { w = tar_nei->point_id; if (visted[w] != 1) { DFSTraverse(A, w); } tar_nei = tar_nei->next; } }
void main() { int j,k,n; OLGraph g; VertexType v1,v2; CreateDG(g); Display(g); printf("修改顶点的值,请输入原值 新值: "); scanf("%s%s",v1,v2); PutVex(g,v1,v2); printf("插入新顶点,请输入顶点的值: "); scanf("%s",v1); InsertVex(g,v1); printf("插入与新顶点有关的弧,请输入弧数: "); scanf("%d",&n); for(k=0;k<n;k++) { printf("请输入另一顶点的值 另一顶点的方向(0:弧头 1:弧尾): "); scanf("%s%d",v2,&j); if(j) InsertArc(g,v2,v1); else InsertArc(g,v1,v2); } Display(g); printf("删除一条弧,请输入待删除弧的弧尾 弧头:"); scanf("%s%s",v1,v2); DeleteArc(g,v1,v2); Display(g); printf("删除顶点及相关的弧,请输入顶点的值: "); scanf("%s",v1); DeleteVex(g,v1); Display(g); printf("深度优先搜索的结果:\n"); DFSTraverse(g,visit); printf("广度优先搜索的结果:\n"); BFSTraverse(g,visit); DestroyGraph(g); }
int main() { int i; ALGraph G; //创建图 CreateGraph(&G); //深度优先遍历图 DFSTraverse(G,PrintElem); printf("\n"); //求关节点 FindArticul(G); printf("i G.vertices[i].data visited[i] low[i] Order_Low\n"); for(i = 0; i < G.vexnum ; i++) printf("%d %d %d %d %d\n",i,G.vertices[i].data,visited[i],low[i],Order_Low[i]); return 0; /* please enter the kind of graph(DG:0,DN:1,UDG:2,UDN:3):2 please the vexnum and arcnum:13,17 please enter the value of each vertex:1,2,3,4,5,6,7,8,9,10,11,12,13 please enter the heads and tails: 1,2 1,3 1,6 1,12 2,3 2,4 2,7 2,8 2,13 4,5 7,8 7,9 7,11 8,11 10,12 10,13 12,13 >>(可以看到2输出了两次,这是因为删除2会将图分割成三颗树) 1 2 3 4 5 7 8 11 9 13 10 12 6 6,7 1,2 3,4 1,2 0,1 i G.vertices[i].data visited[i] low[i] Order_Low 0 1 1 1 0 1 2 5 1 9 2 3 12 1 8 3 4 10 5 7 4 5 11 10 6 5 6 13 1 12 6 7 8 5 3 7 8 6 5 5 8 9 9 8 2 9 10 4 2 1 10 11 7 5 4 11 12 2 1 11 12 13 3 1 10 */ }
void main() { int i,j,k,n; ALGraph g; VertexType v1,v2; printf("请选择有向图\n"); CreateGraph(g); Display(g); printf("删除一条边或弧,请输入待删除边或弧的弧尾 弧头:"); scanf("%s%s",v1,v2); DeleteArc(g,v1,v2); printf("修改顶点的值,请输入原值 新值: "); scanf("%s%s",v1,v2); PutVex(g,v1,v2); printf("插入新顶点,请输入顶点的值: "); scanf("%s",v1); InsertVex(g,v1); printf("插入与新顶点有关的弧或边,请输入弧或边数: "); scanf("%d",&n); for(k=0;k<n;k++) { printf("请输入另一顶点的值: "); scanf("%s",v2); printf("对于有向图,请输入另一顶点的方向(0:弧头 1:弧尾): "); scanf("%d",&j); if(j) InsertArc(g,v2,v1); else InsertArc(g,v1,v2); } Display(g); printf("删除顶点及相关的弧或边,请输入顶点的值: "); scanf("%s",v1); DeleteVex(g,v1); Display(g); printf("深度优先搜索的结果:\n"); DFSTraverse(g,print); printf("广度优先搜索的结果:\n"); BFSTraverse(g,print); DestroyGraph(g); printf("请顺序选择有向网,无向图,无向网\n"); for(i=0;i<3;i++) // 验证另外3种情况 { CreateGraph(g); Display(g); printf("插入新顶点,请输入顶点的值: "); scanf("%s",v1); InsertVex(g,v1); printf("插入与新顶点有关的弧或边,请输入弧或边数: "); scanf("%d",&n); for(k=0;k<n;k++) { printf("请输入另一顶点的值: "); scanf("%s",v2); if(g.kind<=1) // 有向 { printf("对于有向图或网,请输入另一顶点的方向(0:弧头 1:弧尾): "); scanf("%d",&j); if(j) InsertArc(g,v2,v1); else InsertArc(g,v1,v2); } else // 无向 InsertArc(g,v1,v2); } Display(g); printf("删除顶点及相关的弧或边,请输入顶点的值: "); scanf("%s",v1); DeleteVex(g,v1); Display(g); DestroyGraph(g); } }
int main(int argc, char *argv[]) { AdjBoxPtr my_box; CreateAdjBox(&my_box); AddPoint(my_box, 1); AddPoint(my_box, 2); AddPoint(my_box, 3); AddPoint(my_box, 4); AddPoint(my_box, 5); AddPoint(my_box, 6); AddPoint(my_box, 7); AddPoint(my_box, 8); AddPoint(my_box, 9); AddArc(my_box, 1, 2); AddArc(my_box, 1, 7); AddArc(my_box, 1, 6); AddArc(my_box, 2, 3); AddArc(my_box, 2, 9); AddArc(my_box, 2, 7); AddArc(my_box, 2, 1); AddArc(my_box, 3, 4); AddArc(my_box, 3, 9); AddArc(my_box, 3, 2); AddArc(my_box, 4, 5); AddArc(my_box, 4, 8); AddArc(my_box, 4, 7); AddArc(my_box, 4, 9); AddArc(my_box, 4, 3); AddArc(my_box, 5, 6); AddArc(my_box, 5, 8); AddArc(my_box, 5, 4); AddArc(my_box, 6, 1); AddArc(my_box, 6, 7); AddArc(my_box, 6, 5); AddArc(my_box, 7, 1); AddArc(my_box, 7, 2); AddArc(my_box, 7, 4); AddArc(my_box, 7, 8); AddArc(my_box, 7, 6); AddArc(my_box, 8, 4); AddArc(my_box, 8, 5); AddArc(my_box, 8, 7); AddArc(my_box, 9, 2); AddArc(my_box, 9, 3); AddArc(my_box, 9, 4); ShowAdjBox(my_box); DFSTraverse(my_box, 1); // DFSwithStack(my_box, 1); return 0; }