C語言實現(xiàn)圖的鄰接矩陣存儲操作
利用鄰接矩陣容易判定任意兩個頂點之間是否有邊(或?。┫噙B,并容易求得各個頂點的度。
c語言代碼實現(xiàn)如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX_VER_NUM 50
typedef char VertexType;
typedef enum
{
DG,UDG
}GraphType;
typedef struct
{
VertexType vexs[MAX_VER_NUM]; //頂點向量
int arcs[MAX_VER_NUM][MAX_VER_NUM]; //鄰接矩陣
int vexnum,arcnum; //圖的當(dāng)前頂點數(shù)和弧數(shù)
GraphType type; //圖的種類標(biāo)志
}MGraph;
//根據(jù)名稱得到指定頂點在頂點集合中的下標(biāo)
//vex 頂點
//return 如果找到,則返回下標(biāo),否則,返回0
int getIndexOfVexs(char vex,MGraph *MG)
{
int i;
for(i=1;i<=MG->vexnum;i++)
{
if(MG->vexs[i]==vex)
{
return i;
}
}
return 0;
}
//創(chuàng)建鄰接矩陣
void create_MG(MGraph *MG)
{
int i,j,k;
int v1,v2,type;
char c1,c2;
printf("Please input graph type DG(0) or UDG(1):");
scanf("%d",&type);
if(type==0)
{
MG->type=DG;
}
else if(type==1)
{
MG->type=UDG;
}
else
{
printf("Please input correct graph type DG(0) or UDG(1)!");
return;
}
printf("Please input vexnum:");
scanf("%d",&MG->vexnum);
printf("Please input arcnum:");
scanf("%d",&MG->arcnum);
getchar();
for(i=1;i<=MG->vexnum;i++)
{
printf("Please input %dth vex(char):",i);
scanf("%c",&MG->vexs[i]);
getchar();
}
//初始化鄰接矩陣
for(i=1;i<=MG->vexnum;i++)
{
for (j=1;j<=MG->vexnum;j++)
{
MG->arcs[i][j]=0;
}
}
//輸入邊的信息,建立鄰接矩陣
for(k=1;k<=MG->arcnum;k++)
{
printf("Please input %dth arc v1(char) v2(char):",k);
scanf("%c %c",&c1,&c2);
v1=getIndexOfVexs(c1,MG);
v2=getIndexOfVexs(c2,MG);
if(MG->type==-1)
{
MG->arcs[v1][v2]=MG->arcs[v2][v1]=1;
}
else
{
MG->arcs[v1][v2]=1;
}
getchar();
}
}
//打印鄰接矩陣和頂點信息
void print_MG(MGraph MG)
{
int i,j;
if(MG.type==DG)
{
printf("Graph type: Direct graph\n");
}
else
{
printf("Graph type: Undirect graph\n");
}
printf("Graph vertex number: %d\n",MG.vexnum);
printf("Graph arc number: %d\n",MG.arcnum);
printf("Vertex set:");
for(i=1;i<=MG.vexnum;i++)
{
printf("%c",MG.vexs[i]);
}
printf("\nAdjacency Matrix:\n");
for(i=1;i<=MG.vexnum;i++)
{
for(j=1;j<=MG.vexnum;j++)
{
printf("%d",MG.arcs[i][j]);
}
printf("\n");
}
}
//主函數(shù)
int main(void)
{
MGraph MG;
create_MG(&MG);
print_MG(MG);
return 0;
}
得到的結(jié)果如下圖所示:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C++輸入輸出重定向方法示例
欄 目:C語言
下一篇:C語言中的奇技淫巧
本文標(biāo)題:C語言實現(xiàn)圖的鄰接矩陣存儲操作
本文地址:http://m.jygsgssxh.com/a1/Cyuyan/695.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文


