Incidence matrix ของกราฟเป็นอีกการแสดงผลหนึ่งเพื่อเก็บในหน่วยความจำ เมทริกซ์นี้ไม่ใช่เมทริกซ์สี่เหลี่ยม ลำดับของ incidence matrix คือ V x E โดย V คือจำนวนจุดยอด และ E คือจำนวนเส้นเชื่อมในกราฟ
ในแต่ละแถวของเมทริกซ์นี้ เราวางจุดยอด และในแต่ละคอลัมน์คือเส้นเชื่อม ในการแสดงผลนี้ สำหรับเส้นเชื่อม e {u, v} จะถูกทำเครื่องหมาย 1 ที่ตำแหน่ง u และ v ของคอลัมน์ e
ความซับซ้อนของการแสดงผลด้วย Adjacency Matrix
การแสดงผลด้วย incidence matrix ใช้พื้นที่ O(V x E) ขณะคำนวณ สำหรับ complete graph จำนวนเส้นเชื่อมจะเป็น V(V-1)/2 ดังนั้น incidence matrix ใช้พื้นที่มากกว่าในหน่วยความจำ
Input

Output
| E0 |
E1 |
E2 |
E3 |
E4 |
E5 |
E6 |
E7 |
E8 |
|
|---|---|---|---|---|---|---|---|---|---|
| 0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
| 1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
| 2 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
| 3 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
| 4 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
| 5 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
อัลกอริทึม
add_edge(u, v)
Input: จุดยอด u และ v ของเส้นเชื่อม {u,v}
Output: Incidence matrix ของกราฟ G
ในตอนแรก จำนวนเส้นเชื่อม ed_cnt คือ 0 สำหรับ incidence matrix
Begin
ed_cnt := ed_cnt + 1
inc_matrix[u, ed_cnt] := 1
inc_matrix[v, ed_cnt] := 1
End
ตัวอย่างโค้ด (C++)
#include <iostream>
using namespace std;
int inc_arr[20][20]; // อาร์เรย์เริ่มต้นเก็บ incidence matrix
int ed_no = 0;
void displayMatrix(int v, int e) {
int i, j;
for(i = 0; i < v; i++) {
for(j = 0; j < e; j++) {
cout << inc_arr[i][j] << " ";
}
cout << endl;
}
}
void add_edge(int u, int v) {
// ฟังก์ชันเพิ่มเส้นเชื่อมในเมทริกซ์พร้อมหมายเลขเส้นเชื่อม
inc_arr[u][ed_no] = 1;
inc_arr[v][ed_no] = 1;
ed_no++; // เพิ่มหมายเลขเส้นเชื่อม
}
main(int argc, char* argv[]) {
int v = 6; // มี 6 จุดยอดในกราฟ
int e = 9; // มี 9 เส้นเชื่อมในกราฟ
add_edge(0, 4);
add_edge(0, 3);
add_edge(1, 2);
add_edge(1, 4);
add_edge(1, 5);
add_edge(2, 3);
add_edge(2, 5);
add_edge(5, 3);
add_edge(5, 4);
displayMatrix(v, e);
}
ผลลัพธ์
1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 1 1