Exemple #1
0
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;
}
Exemple #5
0
int main()
{
	ALGraph G;
	CreateGraph(&G);
	printf("DFS\n");
	DFSTraverse(G);
	printf("\n");
	printf("BFS\n");
	BFSTraverse(G);
	return 0;
}
Exemple #6
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
 }
Exemple #10
0
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;
}
Exemple #11
0
void main()
{
    LGraph* pG;

    // 自定义"图"(自己输入数据)
    //pG = create_lgraph();
    // 采用已有的"图"
    pG = create_example_lgraph();

    // 打印图
    print_lgraph(*pG);
    DFSTraverse(*pG);
    BFS(*pG);
}
Exemple #12
0
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;
    }
}
Exemple #15
0
 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

	*/
}
Exemple #17
0
 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;
}