算法训练 关联矩阵
Problem:
Hint:
先来说一下图的关联矩阵是什么,一开始我以为图的关联矩阵和图的临接矩阵是一个东西,后来百度了一下发现有很大的区别
1.无权有向图的临接矩阵表示的是结点和结点之间的关系,若结点到结点有边,那么则在临接矩阵中表示1,若结点到结点没有变那么表示为0,若结点个数为n,那么临接矩阵的大小为n*n
例:
( 图1)
图1中图的临接矩阵:
2.无权有向图的关联矩阵表示的是结点与边之间的关系,若结点是边的起点则在关联矩阵表示为1,若结点是边的终点则在关联矩阵表示为-1,若结点与边之间没有关联则表示为0
例:
图1中图的关联矩阵:
思路:
- 该题中只要一列一列处理就行,若是起点将关联矩阵是中
置为1,终点置为-1,若没有相关联置为0就行
AcCode:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[][] vToe = new int[n][m];
int j = 0;//列
for(int i = 0;i<m;i++) {
int startNode = in.nextInt();
int endNode = in.nextInt();
vToe[startNode-1][j] = 1;
vToe[endNode-1][j] = -1;
j++;
}
for (int i = 0; i < vToe.length; i++) {
for (int k = 0; k < vToe[i].length-1; k++) {
System.out.print(vToe[i][k]+" ");
}
System.out.println(vToe[i][vToe[i].length-1]);
}
}
}