⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 无向图.c

📁 这是一个数据无向图的简单模拟程序,可以用于数据结构的学习
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 20
struct ArcNode
{
    int adjvex;
    struct ArcNode *nextarc;
};

struct Vnode
{
    int data;
    struct ArcNode *firstarc;
};

struct Vnode AdjList[MaxSize];
int m,n,v,cord;

main()
{
    void creatgraph(struct Vnode A[MaxSize]);
    void dfs(struct Vnode A[MaxSize]);
    void bfs(struct Vnode A[MaxSize]);
    do
    {
        printf("\n            主菜单");
        printf("\n      1     建立无向图的邻接表");
        printf("\n      2     按深度遍历图");
        printf("\n      3     按广度遍历图");
        printf("\n      4     结束程序运行");
        printf("\n-----------------------------------");
        printf("\n    请输入您的选择  1, 2, 3, 4 ");
        scanf("%d",&cord);
        switch(cord)
    	{
        case 1:
            creatgraph(AdjList);
            break;
        case 2:
            dfs(AdjList);
            break;
        case 3:
            bfs(AdjList);
            break;
        case 4:
            exit(0);
    	}
    }while(cord<=4);
}

void creatgraph(struct Vnode A[MaxSize])
{
    int i,j,k;
    struct ArcNode *p;
    printf("input arces and vexes");
    scanf("%d %d",&m,&n);
    for(k=0;k<n;k++)
    {
        printf("\ninput arc");
        scanf("%d%d",&i,&j);
        p=(struct ArcNode*)malloc(sizeof(struct ArcNode));
        p->adjvex=j;
        p->nextarc=A[i-1].firstarc;
        A[i-1].firstarc=p;
        p=(struct ArcNode*)malloc(sizeof(struct ArcNode));
        p->adjvex=i;
        p->nextarc=A[j-1].firstarc;
        A[j-1].firstarc=p;
    }
    printf("\n");
    for(k=0;k<n;k++)
    {
        printf("%d",A[k].data);
        p=A[k].firstarc;
        while(p)
    	{
            printf("%d",p->adjvex);
            p=p->nextarc;
    	}
        printf("\n");
    }
}

void dfs(struct Vnode A[MaxSize])
{
    struct ArcNode *p,*ar[MaxSize];

    int x,i,y,top=-1;
    int visited[MaxSize];
    for(i=0;i<n;i++)
        visited[i]=0;
    printf("\ninput x");
    scanf("%d",&x);
    printf("%d",x);
    visited[x-1]=1;
    p=A[x-1].firstarc;
    while((p)||(top>=0))
    {
        if(!p)
    	{
            p=ar[top];
            top--;
    	}
        y=p->adjvex;
        if(visited[y-1]==0)
    	{
            visited[y-1]=1;
            printf("->%d",y);
            p=p->nextarc;
        	if(p)
    		{
            	top++;
                ar[top]=p;
    		}
            p=A[y-1].firstarc;
    	}
        else p=p->nextarc;
    }
}

void bfs(struct Vnode A[MaxSize])
{}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -