qq_26211907 2015-07-10 13:43 采纳率: 0%
浏览 4875

关于数据结构的简单问题完整算法 C语言 假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号

假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号 急急急紧急急急急急急急急急急急急急急急急急急急急急急

  • 写回答

5条回答

  • frank_20080215 2015-07-10 14:32
    关注

    首先以一个结构体存储一个图:

    struct MGraph
    {
    int vertex[maxvertex]; //存顶点
    int arc[maxvertex][maxvertex]; //存边(邻接矩阵)
    int vertexnum,arcnum; //顶点数和边数
    };

    其次是对图的初始化:

    void CreatMGraph(MGraph *&G)
    {
    int i,j;
    cin1>>G->vertexnum>>G->arcnum; //输入顶点数和边数

    for(i=0;ivertexnum;i++) //输入每个顶点的值
    cin1>>G->vertex[i];

    for(i=0;ivertexnum;i++) //初始化邻接矩阵
    for(j=0;jvertexnum;j++)
    G->arc[i][j]=0;

    for(i=0;iarcnum;i++)

    {
    int n,m,w;
    cin1>>n>>m>>w; //修改邻接矩阵中的值
    G->arc[n][m]=w;
    G->arc[m][n]=w;
    }
    }

    在此之前需要定义一个全局变量的visited数组:

    int visited[maxvertex]; //标记已被访问过的顶点(全局变量)

    //广度优先遍历

    void BFS(MGraph *&G,int v)

    {
    queue q;
    int x,j;
    if(!visited[v]) //即为visited[v]==0,也就是未被访问过
    {
    cout<vertex[v]<<" ";
    visited[v]=1;
    q.push(v); //被访问的顶点入队
    }

    while(!q.empty()) //队不空进循环
    {
    x=q.front(); //取队头元素
    q.pop(); //队头出队
    for(j=0;jvertexnum;j++)
    if (G->arc[x][j]&&!visited[j])
    {
    cout<vertex[j]<<" ";
    visited[j]=1; //标记为访问过
    q.push(j); //被访问的顶点继续入队
    }
    }
    }

    //深度优先遍历
    void DFS(MGraph *&G,int v)

    {
    nt j;
    if(!visited[v])

    {
    cout<vertex[v]<<" ";
    visited[v]=1; //标记为访问过
    }

    for(j=0;jvertexnum;j++)
    if (G->arc[v][j]&&!visited[j])//邻接矩阵的第(v,j)元素不为0
    { //且未被访问过则递归
    DFS(G,j);
    }
    }

    此为图的邻接矩阵的输出函数:

    void Print(MGraph *G)
    {
    int i,j;
    for(i=0;ivertexnum;i++)
    {
    for(j=0;jvertexnum;j++)
    cout<arc[i][j]<<" ";
    cout<<endl;
    }
    }

    main函数调用上面函数:

    int main()
    {
    MGraph *G=new MGraph;
    CreatMGraph(G);

    cout<<"输出邻接矩阵:"<<endl;
    Print(G);

    cout<<"深度优先搜索:";
    DFS(G,0);
    cout<<endl;

    memset(visited,0,sizeof(visited));//非常重要!!在下一个搜索之前一定要将标志位全部重新赋值为0

    cout<<"广度优先搜索:";
    BFS(G,0);
    cout<<endl;

    return 0;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置