(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語言矩陣
- 第6章 圖的學習總結(鄰接矩陣&鄰接表)矩陣
- 14、圖-鄰接矩陣矩陣
- 從原始邊列表到鄰接矩陣Python實現圖資料處理的完整指南矩陣Python
- 軟考筆記-有向圖的鄰接矩陣筆記矩陣
- 【Python】Python中的圖的鄰接矩陣轉化為字典格式Python矩陣
- 【PTA】鄰接矩陣儲存圖的深度優先遍歷矩陣
- BFS求無權圖的單源最短路徑-鄰接矩陣儲存矩陣
- 用C語言輸出蛇形矩陣C語言矩陣
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- C語言實現矩陣螺旋輸出C語言矩陣
- 240. 搜尋二維矩陣 II 和74. 搜尋二維矩陣矩陣
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- 資料結構筆記(一)——C語言實現鄰接矩陣儲存的無向圖,判斷是否為連通圖,並且實現最小生成樹Prim演算法資料結構筆記C語言矩陣演算法
- 巨大的矩陣(矩陣加速)矩陣
- 伴隨矩陣和逆矩陣的關係證明矩陣
- c語言中實現4行3列矩陣和3行4列矩陣的運算C語言矩陣
- 鄰接表
- 資料結構(一)-稀疏矩陣資料結構矩陣
- 矩陣的最短距離和矩陣
- 矩陣和陣列矩陣陣列
- 第四章:多維陣列和矩陣 ------------- 4.8 子矩陣的最大累加和陣列矩陣
- 第四章:多維陣列和矩陣 ------------- 4.4 找出邊界為1的最大子方陣陣列矩陣
- 資料結構實驗 二維矩陣的實現資料結構矩陣
- 求任意矩陣的伴隨矩陣矩陣
- LeetCode 74——搜尋二維矩陣LeetCode矩陣
- 74_搜尋二維矩陣矩陣
- 74. 搜尋二維矩陣矩陣
- 矩陣的特徵值和特徵向量矩陣特徵
- 資料結構作業——用鄰接表表示無向網資料結構
- [Python手撕]搜尋二維矩陣Python矩陣
- C語言實現帶表頭結點單連結串列的初始化、查詢、插入、刪除、輸出、撤銷等操作C語言
- 機器學習中的矩陣向量求導(五) 矩陣對矩陣的求導機器學習矩陣求導
- C語言:將一個4X4的矩陣賦值,矩陣元素的值為其行數與列數的乘積C語言矩陣賦值
- leetcode240——搜尋二維矩陣(medium)LeetCode矩陣
- Python 圖_系列之基於鄰接炬陣實現廣度、深度優先路徑搜尋演算法Python演算法