(C語言、資料結構)鄰接矩陣的初始化、邊的插入和輸出,以及鄰接矩陣的撤銷和邊的搜尋
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define Overflow 2
#define Underflow 3
#define NotPresent 4
#define Duplicate 5
typedef int ElemType;
typedef struct
{
ElemType **a; //鄰接矩陣
int n; //圖的當前頂點數
int e; //圖的當前邊數
ElemType noEdge; //兩頂點間無邊時的值
}mGraph;
typedef int Status;
Status Init (mGraph *mg,int nSize,ElemType noEdgeValue)
{
int i,j;
mg->n=nSize; //初始化頂點數
mg->e=0; //初始時沒有邊
mg->noEdge=noEdgeValue; //初始化沒有邊時的取值
mg->a=(ElemType**)malloc(nSize*sizeof(ElemType*)); //生成長度為n的一維指標陣列
if(!mg->a)
return ERROR;
for(i=0;i<mg->n;i++) //動態生成二維陣列
{
mg->a [i]=(ElemType*)malloc(nSize*sizeof(ElemType*));
for(j=0;j<mg->n;j++)
mg->a[i][j]=mg->noEdge;
mg->a[i][j]=0;
}
return OK;
}
void Destroy (mGraph *mg ) //鄰接矩陣的撤銷
{
int i;
for(i=0;i<mg->n;i++) //釋放n個一維陣列的儲存空間
free(mg->a[i]); //釋放一維指標陣列的儲存空間
free(mg->a);
}
Status Exist(mGraph *mg,int u,int v) //邊的搜尋
{
if(u<0||v<0||v>mg->n-1||u==v||mg->a[u][v]==mg->noEdge)
return ERROR;
return OK;
}
Status Insert(mGraph *mg,int u,int v,ElemType w) //邊的插入
{
if(u<0||v<0||v>mg->n-1||u==v) return ERROR;
if(mg->a[u][v]!=mg->noEdge)
return Duplicate; //若待插入邊已存在,則返回出錯資訊
mg->a[u][v]=w; //插入新邊
mg->e++;
return OK;
}
Status Remove(mGraph *mg,int u,int v) //邊的刪除
{
if(u<0||v<0||v>mg->n-1||u==v)
return ERROR;
if(mg->a[u][v]==mg->noEdge) //若待刪除邊不存在,則返回出錯資訊
return NotPresent;
mg->a[u][v]=mg->noEdge; //刪除邊
mg->e--;
return OK;
}
Status Putout(mGraph *mg)
{
int i,j;
for(i=0;i<mg->n;i++)
{ for(j=0;j<mg->n;j++)
{printf("%d",mg->a[i][j]);}
printf("\n");
}
}
void main()
{
mGraph mg;
Init (&mg,4,0);
Insert(&mg,1,0,1);
Insert(&mg,1,2,1);
Insert(&mg,2,3,1);
Insert(&mg,3,0,1);
Putout(&mg);
//Exist(&mg,1,1);
// Destroy (&mg);
}
實際上,圖的鄰接矩陣的建立方法是一樣的,不論是無向圖還是有向圖,還是權數都與輸入的數值有關,建立鄰接矩陣的程式碼是沒有區別的,主要的區別在於Insert(插入函式的區別)
Status Insert(mGraph *mg,int u,int v,ElemType w) //邊的插入
int u 決定行的值
int v 決定列的值
ElemType w 決定權值
相關文章
- C#實現圖的鄰接矩陣和鄰接表結構C#矩陣
- 圖的儲存結構——鄰接矩陣與鄰接表矩陣
- 鄰接矩陣、度矩陣矩陣
- 圖的深度遍歷(C語言)鄰接矩陣表示C語言矩陣
- 14、圖-鄰接矩陣矩陣
- 第6章 圖的學習總結(鄰接矩陣&鄰接表)矩陣
- BFS-圖的廣度優先搜尋--鄰接矩陣矩陣
- _DataStructure_C_Impl:圖的鄰接矩陣儲存ASTStruct矩陣
- 從原始邊列表到鄰接矩陣Python實現圖資料處理的完整指南矩陣Python
- 軟考筆記-有向圖的鄰接矩陣筆記矩陣
- 【PTA】鄰接矩陣儲存圖的深度優先遍歷矩陣
- POJ 2778-DNA Sequence(AC自動機+構建鄰接矩陣+矩陣快速冪)矩陣
- 從零開始學golang之圖-鄰接矩陣Golang矩陣
- 【Python】Python中的圖的鄰接矩陣轉化為字典格式Python矩陣
- BFS求無權圖的單源最短路徑-鄰接矩陣儲存矩陣
- 用C語言輸出蛇形矩陣C語言矩陣
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- C語言實現矩陣螺旋輸出C語言矩陣
- 240. 搜尋二維矩陣 II 和74. 搜尋二維矩陣矩陣
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- 資料結構筆記(一)——C語言實現鄰接矩陣儲存的無向圖,判斷是否為連通圖,並且實現最小生成樹Prim演算法資料結構筆記C語言矩陣演算法
- 鄰接表
- 資料結構與演算法——圖的鄰接表表示法類的C++實現資料結構演算法C++
- 巨大的矩陣(矩陣加速)矩陣
- 伴隨矩陣和逆矩陣的關係證明矩陣
- 資料結構(一)-稀疏矩陣資料結構矩陣
- c語言中實現4行3列矩陣和3行4列矩陣的運算C語言矩陣
- 矩陣和陣列矩陣陣列
- 矩陣的最短距離和矩陣
- 資料結構作業——用鄰接表表示無向網資料結構
- 樹形結構資料儲存方案(一):鄰接列表模式模式
- 第四章:多維陣列和矩陣 ------------- 4.4 找出邊界為1的最大子方陣陣列矩陣
- 74. 搜尋二維矩陣矩陣
- 74_搜尋二維矩陣矩陣
- 【面試】輸出"蛇形"矩陣面試矩陣
- 3D圖形:矩陣的行列式,矩陣的逆、正交矩陣、齊次矩陣3D矩陣
- 第四章:多維陣列和矩陣 ------------- 4.8 子矩陣的最大累加和陣列矩陣
- 矩陣中最大的二維矩陣矩陣