網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
python鄰接表轉(zhuǎn)鄰接矩陣
閑話少說(shuō),前段時(shí)間看到有同學(xué)問(wèn)怎么把鄰接表轉(zhuǎn)成鄰接矩陣,想了想做了一下,僅供參考。= =
- _python 2.7 _
- 包:networkX,numpy
# coding:utf-8
#將一個(gè)圖,network轉(zhuǎn)換為鄰接矩陣
import networkx ?as nx
import numpy as np
G = nx.read_weighted_edgelist("xx/xx.edgelist")
A = nx.to_numpy_matrix(G)
def savetxt(filename,x):
? ? np.savetxt(filename,x,fmt='%s',newline='\n')
savetxt("xx",A)
主要就是利用 networkx 能夠方便讀寫網(wǎng)絡(luò),并且寫成我們需要的各種格式。
最后生成的結(jié)果為 txt 格式,手動(dòng)導(dǎo)入excel然后按照空格分列就可以了。
圖的存儲(chǔ)—鄰接矩陣與鄰接表
有向圖最常見(jiàn)的存儲(chǔ)方式有兩種:鄰接矩陣和鄰接表。
我們以這樣一個(gè)圖為例子演示這兩種存儲(chǔ)方式。
鄰接矩陣
?假如有向圖中有n個(gè)頂點(diǎn),鄰接矩陣是一個(gè)n*n的矩陣A,其元素A[i][j]的值為
?
上面例子的圖的鄰近矩陣如下:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 0 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 0 | 1 | 0 |
2 | 0 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 0 | 0 | 1 |
4 | 0 | 0 | 0 | 0 | 0 |
鄰接表
假如有向圖中有n個(gè)頂點(diǎn),鄰接表是一個(gè)長(zhǎng)度為n的數(shù)組,其索引為i的元素保存的是從頂點(diǎn)i可直接到達(dá)的頂點(diǎn)的列表
上面例子的圖的鄰接表如下:
0: | 1 | 2 |
---|---|---|
1: | 3 | |
2: | 3 | |
3: | 4 | |
4: |
入度與出度
到達(dá)圖中某個(gè)頂點(diǎn)的邊的條數(shù)稱為這個(gè)圖的入度,從某個(gè)頂點(diǎn)出發(fā)的邊的條數(shù)稱為這個(gè)圖的出度
書面練習(xí)
請(qǐng)給出以下幾例圖的鄰接矩陣和鄰接表。
?
編程練習(xí)
題目描述
給定一個(gè) n個(gè)頂點(diǎn) m 條邊的有向圖。請(qǐng)以鄰接矩陣和鄰接表的形式輸出這一張圖。
輸入格式
第一行輸入兩個(gè)正整數(shù) n 和 m,表示圖的頂點(diǎn)數(shù)和邊數(shù)。頂點(diǎn)的編號(hào)為0 ~ n-1。
第二行開始,往后 m 行,每行輸入兩個(gè)以空格隔開的正整數(shù) u,v,表示從u出發(fā)有一條邊直接到達(dá)v。
輸出格式
首先輸出 n 行 n 列的矩陣,以空格隔開每一行之間的數(shù)表示鄰接矩陣。第 i 行第 j 列的數(shù)為 1 則表示從頂點(diǎn) i 出發(fā)有一條邊直接到達(dá) j ;若為 0 則表示沒(méi)有直接到達(dá)的邊。
然后空一行。
再往后輸出 n 行,按頂點(diǎn)編號(hào)從小到大順序。每一行首先先輸出一個(gè)整數(shù) d?,表示這個(gè)頂點(diǎn)的出度,再按照從小到大的順序,依次輸出從該頂點(diǎn)出發(fā)可直接到達(dá)的所有頂點(diǎn)。
輸入輸出樣例
輸入#1
5 5
0 1
1 2
2 4
0 2
2 3
輸出#1
0 1 1 0 0
0 0 1 0 0
0 0 0 1 1
0 0 0 0 0
0 0 0 0 0
?
2 1 2
1 2
2 3 4
0
0
請(qǐng)先嘗試自主編寫,再閱讀下面示例代碼
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class BuildGraph {
static List<List<Integer>> buildAdjacentList(int n, List<int[]> edges) {
List<List<Integer>> res = new ArrayList<>();
for (int i=0; i<n; ++i) {
res.add(new ArrayList<>());
}
for (int[] edge: edges) {
res.get(edge[0]).add(edge[1]);
}
return res;
}
static int[][] buildAdjacentMatrix(int n, List<int[]> edges) {
int[][] res = new int[n][n];
for (int[] edge: edges) {
res[edge[0]][edge[1]] = 1;
}
return res;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(), m = scanner.nextInt();
List<int[]> edges = new ArrayList<>();
for (int i=0; i<m; ++i) {
int u = scanner.nextInt(), v = scanner.nextInt();
edges.add(new int[]{u, v});
}
int[][] adjMatrix = buildAdjacentMatrix(n, edges);
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j) {
if (j != 0) {
System.out.print(' ');
}
System.out.print(adjMatrix[i][j]);
}
System.out.println();
}
System.out.println();
List<List<Integer>> adjList = buildAdjacentList(n, edges);
for (List<Integer> list: adjList) {
System.out.print(list.size(
Collections.sort(list);
for (int e: list) {
System.out.print(" " + e);
}
System.out.println();
}
}
}
總結(jié)
原文鏈接:https://blog.csdn.net/qq_39290880/article/details/89078105
相關(guān)推薦
- 2023-10-16 基于lodop實(shí)現(xiàn)web端打印分頁(yè)樣式自定義配置需求
- 2022-08-01 flask-SQLALchemy連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例_python
- 2023-05-08 C++中new和delete匹配使用過(guò)程詳解_C 語(yǔ)言
- 2022-09-20 Redis深入了解內(nèi)存淘汰與事務(wù)操作_Redis
- 2022-06-04 Android自定義scrollview實(shí)現(xiàn)回彈效果_Android
- 2022-04-12 原生drag拖拽后元素過(guò)大,擋住其他可拖動(dòng)位置無(wú)法拖動(dòng)問(wèn)題
- 2022-11-10 C語(yǔ)言宏定義容易認(rèn)不清的盲區(qū)梳理_C 語(yǔ)言
- 2022-11-20 Python利用pangu模塊實(shí)現(xiàn)文本格式化小工具_(dá)python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支