算法问题:关联矩阵

问题描述

有一个n个结点m条边的有向图,请输出他的关联矩阵。
注意关联矩阵与邻接矩阵不一样,关于关联矩阵的定义可以点击这里

输入格式

第一行两个整数n、m,表示图中结点和边的数目。n<=100,m<=1000。
接下来m行,每行两个整数a、b,表示图中有(a,b)边。
注意图中可能含有重边,但不会有自环。

输出格式

输出该图的关联矩阵,注意请勿改变边和结点的顺序。

样例输入

5 9
1 2
3 1
1 5
2 5
2 3
2 3
3 2
4 3
5 4

样例输出

 1 -1  1  0  0  0  0  0  0
-1  0  0  1  1  1 -1  0  0
 0  1  0  0 -1 -1  1 -1  0
 0  0  0  0  0  0  0  1 -1
 0  0 -1 -1  0  0  0  0  1

示例代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static class InputReader{
        private BufferedReader bufferedReader;
        private StringTokenizer stringTokenizer;

        public InputReader(InputStream inputStream){
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            stringTokenizer = new StringTokenizer("");
        }
        private String next() throws IOException{
            while(!stringTokenizer.hasMoreTokens()){
                stringTokenizer = new StringTokenizer(bufferedReader.readLine());
            }
            return stringTokenizer.nextToken();
        }
        public Integer nextInt() throws IOException{
            return Integer.parseInt(next());
        }
    }
    public static void main(String[] args) throws IOException {
        InputReader inputReader = new InputReader(System.in);
        int n = inputReader.nextInt();
        int m = inputReader.nextInt();
        int[][] a = new int[n][m];
        for(int i = 0; i < n; i ++){
            for(int j = 0; j < m; j ++){
                a[i][j] = 0;
            }
        }
        for(int i = 0, j = 0; i < m && j < m; i ++, j ++){
            int st = inputReader.nextInt();
            int sp = inputReader.nextInt();
            a[st - 1][j] = 1;
            a[sp - 1][j] = -1;
        }
        for(int i = 0; i < n; i ++){
            for(int j = 0; j < m - 1; j ++){
                if(a[i][j] == -1){
                    System.out.print(a[i][j] + " ");
                }
                else{
                    System.out.print(" "+ a[i][j] + " ");
                }
            }
            if(a[i][m - 1] == -1){
                System.out.println(a[i][m - 1]);
            }
            else{
                System.out.println(" " + a[i][m - 1]);
            }
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值