图 数组表示法

来源:互联网 发布:两列数据找出相同项 编辑:程序博客网 时间:2024/04/26 00:47
#include <cstdio>#include <cstdlib>#include <cstring>#include <conio.h>#include <limits.h>#define MAXN 256#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20#define OK 1typedef int VRType;typedef int InfoType;typedef int VertexType;typedef int Status;typedef VRType AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef VRType ArcCell;typedef int GraphKind;typedef struct{    VertexType vexs[MAX_VERTEX_NUM];    AdjMatrix arcs;    int vexnum, arcnum;    GraphKind kind;}MGraph;int LocateVex(MGraph *G, VertexType v){    int i;    for(i=0; i<G->vexnum; i++)        if(G->vexs[i] == v) return i;}Status CreateUDN(MGraph *G){    int i,j,k,v1,v2,w;    scanf("%d %d", &G->vexnum, &G->arcnum);    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] = INFINITY;    for(k=0; k<G->arcnum; k++){        scanf("%d %d %d", &v1, &v2, &w);        i = LocateVex(G, v1); j = LocateVex(G, v2);        G->arcs[i][j] = w;        G->arcs[j][i] = G->arcs[i][j];    }    return OK;}void print(MGraph *G){    int i,j;    for(i=0; i<G->vexnum; i++){        for(j=0; j<G->vexnum; j++){            if(G->arcs[i][j] == INFINITY) printf("∞\t");            else printf("%d\t", G->arcs[i][j]);        }        putchar('\n');    }}int main(){    freopen("d:\\my.txt", "r", stdin);    MGraph G;    CreateUDN(&G);    print(&G);    return 0;}