邻接矩阵的图结构

来源:互联网 发布:在笔记本电脑下载软件 编辑:程序博客网 时间:2024/06/10 13:44

邻接矩阵的图结构


代码如下:

/**  图的临街矩阵的存储形式以及操作  这个图是 :有向图             无权图**/#include <stdio.h>#include <malloc.h>#define MAX 5#define MAXWEIGHT 10000   ///没有边时为无穷///描述整个图的结构体typedef char DataType ;typedef struct{ DataType Vertices[MAX]; int edge[MAX][MAX]; int numOfedge; int numOfVertices;  ///因为使用的是数组存储点,在这里给定数组的长度}AdjMGraph;///初始化void Initiate(AdjMGraph * G){ G->numOfedge = 0; G->numOfVertices = 0; int i,j; for(i=0;i<MAX;i++){    for(j=0;j<MAX;j++){        if(i==j) G->edge[i][j] = 0;        else G->edge[i][j] = MAXWEIGHT;    } }}///插入顶点;void InsertVertex(AdjMGraph * G ,DataType vertiex){  if(G->numOfVertices >=MAX) {        printf("邻接表的数组已经满了");        return ;  }    //开始插入数据    G->Vertices[G->numOfVertices++] = vertiex;}/// 插入边void InsertEdge(AdjMGraph * G,int v1,int v2){   ///判断越界的情况    if(v1 <0 ||v1 >= MAX || v2<0 || v2>=MAX ){        printf("asdasdasd");        return ;     }    ///创建一个有向边    G->edge[v1][v2] = 1;    G->numOfedge++;}///删除边void DeleteEdge(AdjMGraph * G,int v1,int v2){ ///判断越界的情况    if(v1 <0 ||v1 >= MAX || v2<0 || v2>=MAX ){        printf("参数出错");        return ;     }    if(G->edge[v1][v2]==0 ){        printf("i==j不能删除");        return ;    }    if(G->edge[v1][v2]){        printf("this edge does not exists !!! ");        return ;    }    G->edge[v1][v2] = 1;    G->numOfedge--;}///取第一个邻接结点int GetFirstVertex(AdjMGraph * G,int v1){ if(v1<0||v1>=MAX){   printf("参数出错");   return -1; } int i; for(i=0;i<MAX;i++){   if(G->edge[v1][i]!=0 &&G->edge[v1][i]!=MAXWEIGHT){    return i;   } }return -1;}///取下一邻接点int GetNextVertex(AdjMGraph * G,int v1,int v2){ if(v1 <0 ||v1 >= MAX || v2<0 || v2>=MAX ){        printf("参数出错");        return -1;     }   int i;   for(i=v2;i<MAX;i++){       if(G->edge[v1][i]!=0 &&G->edge[v1][i]!=MAXWEIGHT){        return i;   } } return -1;}///输出图void print(AdjMGraph *G){int i,j;printf("顶点数组如下n :\n");for(i=0;i<MAX;i++){        printf("%c  ",G->Vertices[i]);}  printf("\n邻接矩阵如下:\n");  for(i=0;i<MAX;i++){   for(j=0;j<MAX;j++){    printf("%d ",G->edge[i][j]);   }   printf("\n"); }}///mian函数测试int main(){///初始化AdjMGraph G;Initiate(&G);///开始插入点InsertVertex(&G,'A');InsertVertex(&G,'B');InsertVertex(&G,'C');InsertVertex(&G,'D');InsertVertex(&G,'E');///开始插入边InsertEdge(&G,0,1);InsertEdge(&G,0,4);InsertEdge(&G,1,3);InsertEdge(&G,3,2);InsertEdge(&G,2,1);///输出边的信息print(&G);return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 报到证过期了档案怎么办 日本suica卡丢了怎么办 日本地铁卡丢了怎么办 极光卡五星老输怎么办 皮秒留下的色沉怎么办 鼻综合鼻内增生怎么办 做完鼻综合脸肿怎么办 上海车子卖了etc怎么办 车卖了etc设备怎么办 车卖了etc没摘怎么办 交通信息卡丢了怎么办 多囊卵巢无排卵怎么办 卵巢腹镜手术后一直出汗怎么办 双侧卵巢多囊怎么办 备孕子宫内膜厚怎么办 有成熟卵泡不破怎么办 卵泡不排萎缩了怎么办 卵泡8mm一直不长怎么办 卵泡已经长到28x19mm怎么办 多囊卵巢卵泡长不大怎么办 优势卵泡19不排怎么办 多囊卵泡不排卵怎么办 卵泡两天长2mm怎么办 子宫小43*38*26怎么办 优势卵泡打破卵针后并不破怎么办 ktv禁止自带酒水怎么办 记名西瓜卡丢了怎么办 日本电车卡丢了怎么办 网贷暂时没钱还怎么办 华泰倒闭了汽车怎么办 猫躲起来找不到了怎么办 狗生病了不吃饭怎么办 猫猫托运后害怕怎么办 新来的猫害怕怎么办 升工资老板不公平对待怎么办 自酿啤酒苦味重怎么办 自酿啤酒酸味重怎么办 微信电话费充错了怎么办 支付宝电话费充错了怎么办 在淘宝上充错电话费了怎么办 话费1000充错了怎么办