给定N个顶点1到N的无向图,以及M个以2D数组arr [] []形式存在的边缘,其每一行都由两个数字X和Y组成,这表示X和Y之间存在一个边缘,任务是编写用C程序创建给定图的邻接矩阵。
例子:
Input: N = 5, M = 4, arr[][] = { { 1, 2 }, { 2, 3 }, { 4, 5 }, { 1, 5 } }
Output:
0 1 0 0 1
1 0 1 0 0
0 1 0 0 0
0 0 0 0 1
1 0 0 1 0
Input: N = 3, M = 4, arr[][] = { { 1, 2 }, { 2, 3 }, { 3, 1 }, { 2, 2 } }
Output:
0 1 1
1 1 1
1 1 0
方法:想法是使用大小为NxN的正方形矩阵创建邻接矩阵。步骤如下:
- 创建一个大小为NxN的2D数组(例如Adj [N + 1] [N + 1] ),并将该矩阵的所有值初始化为零。
- 对于arr [] []中的每个边(例如X和Y ),将Adj [X] [Y]和Adj [Y] [X]处的值更新为1表示在X和Y之间存在一个边。
- 在上述操作之后,为arr [] []中的所有对显示邻接矩阵。
下面是上述方法的实现:
// C program for the above approach
#include
// N vertices and M Edges
int N, M;
// Function to create Adjacency Matrix
void createAdjMatrix(int Adj[][N + 1],
int arr[][2])
{
// Initialise all value to this
// Adjacency list to zero
for (int i = 0; i < N + 1; i++) {
for (int j = 0; j < N + 1; j++) {
Adj[i][j] = 0;
}
}
// Traverse the array of Edges
for (int i = 0; i < M; i++) {
// Find X and Y of Edges
int x = arr[i][0];
int y = arr[i][1];
// Update value to 1
Adj[x][y] = 1;
Adj[y][x] = 1;
}
}
// Function to print the created
// Adjacency Matrix
void printAdjMatrix(int Adj[][N + 1])
{
// Traverse the Adj[][]
for (int i = 1; i < N + 1; i++) {
for (int j = 1; j < N + 1; j++) {
// Print the value at Adj[i][j]
printf("%d ", Adj[i][j]);
}
printf("\n");
}
}
// Driver Code
int main()
{
// Number of vertices
N = 5;
// Given Edges
int arr[][2]
= { { 1, 2 }, { 2, 3 },
{ 4, 5 }, { 1, 5 } };
// Number of Edges
M = sizeof(arr) / sizeof(arr[0]);
// For Adjacency Matrix
int Adj[N + 1][N + 1];
// Function call to create
// Adjacency Matrix
createAdjMatrix(Adj, arr);
// Print Adjacency Matrix
printAdjMatrix(Adj);
return 0;
}
输出:
0 1 0 0 1
1 0 1 0 0
0 1 0 0 0
0 0 0 0 1
1 0 0 1 0
时间复杂度: O(N 2 ) ,其中N是图形中的顶点数。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。