# Graph# Adjacency Matrix# Basic I/O

f668 - FJCU_109_Winter_Day1_Lab3 Adjacency Matrix 和 Adjacency List 練習

🔗 前往 ZeroJudge 原題

題目描述

題目給定一個無向簡單圖的點數 N 和邊數 M,以及每條邊的兩個端點。要求輸出每個點的相鄰點列表,相鄰點按照點的編號升序排列。

解題思路

本題可以使用鄰接矩陣來表示圖。鄰接矩陣是一個 N x N 的二維陣列,其中 a[i][j] = 1 表示點 i 和點 j 之間存在邊,a[i][j] = 0 表示不存在邊。

首先,初始化鄰接矩陣,將對角線元素設為 1,表示每個點與自身相鄰。然後,遍歷輸入的每條邊,將對應的鄰接矩陣元素設為 1。最後,遍歷每個點,輸出其相鄰點的列表。

複雜度分析

  • 時間複雜度: O(N^2 + M)
  • 空間複雜度: O(N^2)

程式碼

#include <iostream>
using namespace std;
int a[11][11],n,m,x,y;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	cin >> n >> m;
	for(int i=1;i<=n;++i){
		a[i][i]=1;
	}
	while(m--){
		cin >> x >> y;
		a[x][y]=1;
		a[y][x]=1;
	}
	for(int i=1;i<=n;++i){
		cout << i << ": ";
		for(int j=1;j<=n;++j){
			if(i!=j&&a[i][j]){
				cout << j << " ";
			}
		}
		cout << "\n";
	}
}

Discussion