算法训练 关联矩阵

Problem:

算法训练 关联矩阵

Hint:

先来说一下图的关联矩阵是什么,一开始我以为图的关联矩阵和图的临接矩阵是一个东西,后来百度了一下发现有很大的区别

1.无权有向图的临接矩阵表示的是结点和结点之间的关系,若结点到结点有边,那么则在临接矩阵中表示1,若结点到结点没有变那么表示为0,若结点个数为n,那么临接矩阵的大小为n*n

例:

算法训练 关联矩阵

                              ( 图1)

图1中图的临接矩阵:

算法训练 关联矩阵

2.无权有向图的关联矩阵表示的是结点与边之间的关系,若结点是边的起点则在关联矩阵表示为1,若结点是边的终点则在关联矩阵表示为-1,若结点与边之间没有关联则表示为0

例:

图1中图的关联矩阵:

算法训练 关联矩阵

 

思路:

  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]);
		}
	}
}