| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 426 人关注过本帖
标题:邻接矩阵问题,大家快来看看啦!
只看楼主 加入收藏
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:7 
邻接矩阵问题,大家快来看看啦!
//用邻接矩存储一个图

#include<stdio.h>
#include<stdlib.h>
#define MAX 30

typedef struct{
    char vexs[MAX];
    int edges[MAX][MAX];
    int n;
    int e;
}MGragh;


//创建一个矩阵图
void CreateGragh(MGragh *G){

    G = (MGragh*)malloc(sizeof(MGragh));

    int i = 0, j = 0, k = 0, w = 0;
    char ch ='0';

    //输入顶点个数,边数个数
    printf("输入顶点的个数和边数的个数:\n");
    scanf("%d%d", &(G -> n), &(G -> e));

    printf("输入图的顶点(字符):\n");
    for(i = 0; i < G -> n; i++){
        scanf("%c", &(G -> vexs[i]));
    }
   

    //给矩阵赋初值
    for(i = 0; i < G -> n; i++){
        for(j = 0; j < G -> n; j++){
            G -> edges[i][j] = 0;
        }
    }

    //输入e条边,建立邻接矩阵
    for(k = 0; k < G -> e; k++){
        scanf("%d%d",&i, &j);
        G -> edges[i][j] = 1;
    }

    //输出矩阵
    printf("输出邻接矩阵:\n");
    for(i = 0; i < G -> n; i++){
        for(j = 0; j < G -> n; j++){
            printf("%d  ", G-> edges[i][j]);
            if(j == G -> n - 1)
            printf("\n");
        }
        }
}

//main 函数
 void main(){
     int i = 0;
     int j = 0;
    MGragh G;
    CreateGragh(&G);
 }
/*
为什么输入e条边,建立邻接矩阵
    for(k = 0; k < G -> e; k++){
        scanf("%d%d",&i, &j);
        G -> edges[i][j] = 1;
    }
不会执行
搞的我累死了,还是没有出来,老是输出全为0的数!
高手们给个回答!

搜索更多相关主题的帖子: include 
2012-05-25 01:40
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
收藏
得分:0 
没人来啊,怎么搞得,我没得睡了,明天要做实验啊!

最惨的不是忘不了悲伤的回忆,而是那些悲伤的回忆却开始记不清。。。
2012-05-25 01:47
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
程序代码:
void Create_Graph(MGraph &G)
{
    int i,j,k;
    printf("请输入顶点的个数和弧的个数:\n");
    scanf("%d%d",&G.vexnum,&G.arcnum);
    printf("请输入顶点:\n");
    for(i=0;i<G.vexnum;i++)
        scanf("%d",&G.vexs[i]);
    for(i=0;i<G.vexnum;i++)
        for(j=0;j<G.vexnum;j++)
            G.arcs[i][j]=0;
    printf("请输入%d边\n",G.arcnum);
    for(k=0;k<G.arcnum;k++)
    {
        scanf("%d,%d",&i,&j);
        G.arcs[i][j]=1;
        G.arcs[j][i]=1;
    }
}
以前写的,妹子看一下吧
2012-05-25 08:06
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:100 
调试啊

                                         
===========深入<----------------->浅出============
2012-05-25 08:49
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
收藏
得分:0 
回复 4楼 laoyang103
????

最惨的不是忘不了悲伤的回忆,而是那些悲伤的回忆却开始记不清。。。
2012-05-25 12:25
阴阳
Rank: 4
等 级:业余侠客
帖 子:102
专家分:297
注 册:2012-4-7
收藏
得分:0 
顶贴的

一阴一阳之谓道!
2012-05-25 12:51
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
收藏
得分:0 
回复 4楼 laoyang103
程序代码:
//用邻接矩存储一个图

#include<stdio.h>
#include<stdlib.h>
#define MAX 30

typedef struct{
    char vexs[MAX];
    int edges[MAX][MAX];
    int n;
    int e;
}MGragh;

int visited[MAX] = {0};

//创建一个矩阵图
MGragh* CreateGragh(MGragh *G){

    G = (MGragh*)malloc(sizeof(MGragh));

    int i = 0, j = 0, k = 0, w = 0;
    char ch ='0';

    //输入顶点个数
    printf("输入顶点的个数:\n");
    scanf("%d", &(G -> n));
    fflush(stdin);
    printf("输入图的顶点(字符):\n");
    for(i = 0; i < G -> n; i++){
        scanf("%c", &(G -> vexs[i]));
    }
  


    //给矩阵赋初值
    for(i = 0; i < G -> n; i++){
        for(j = 0; j < G -> n; j++){
            G -> edges[i][j] = 0;
        }
    }

    //输入e边的个数
    printf("输入图的边数:\n");
    scanf("%d", &(G -> e));

    //输入e条边,建立邻接矩阵
    for(k = 0; k < G -> e; k++){
        scanf("%d%d",&i, &j);
        G -> edges[i][j] = 1;
        G -> edges[j][i] = 1;
    }

    //输出矩阵
    printf("输出邻接矩阵:\n");
    for(i = 0; i < G -> n; i++){
        for(j = 0; j < G -> n; j++){
            printf("%d  ", G-> edges[i][j]);
            if(j == G -> n - 1)
            printf("\n");
        }
        }
    return G;
   

}


//深度优先递归遍历算法
void DFStraverse(MGragh* G, int i) 

{int j;

printf("%c  ",G -> vexs[i]);

visited[i]=1;

for(j=0;j<G -> n;j++){
    if((G -> edges[i][j]==1)&&(visited[j] == 0)){
        DFStraverse(G, j);
    }
}
}


//main 函数
void main(){
    int key = 0;
    MGragh G;
    MGragh* g;
    g = CreateGragh(&G);

    printf("输入要从图中哪个顶点开始遍历(用数字代替):\n");
    scanf("%d", &key);

    printf("输出从第%d个顶点开始遍历时图的顺序:\n", key);
    DFStraverse(g, key - 1);
   

   

    free(g);
}

/*经过各种途经,终于可以运行了,还要用什么fflush(stdin);当时完全不知道,哼哼,不过还好,同学告诉我了


































最惨的不是忘不了悲伤的回忆,而是那些悲伤的回忆却开始记不清。。。
2012-05-25 16:35
如此悠然
Rank: 2
等 级:论坛游民
帖 子:62
专家分:86
注 册:2012-5-18
收藏
得分:0 
小手一抖,十分到手,手提酱油,低头猛走~

——————
严谨
2012-05-25 18:17
快速回复:邻接矩阵问题,大家快来看看啦!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036585 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved