java绘制有向图_AcWing 848. 有向图的拓扑序列 Java

题目描述

blablabla

样例

blablabla

算法1

Java 代码

import java.util.*;

import java.util.stream.*;

import java.io.*;

class Main{

static int n, m;

static int[] in;

static Map> map = new HashMap<>();

static Queue q;

public static void main(String[] args) throws IOException {

BufferedReader b = new BufferedReader(new InputStreamReader(System.in));

String[] s = b.readLine().split("\\s+");

n = Integer.parseInt(s[0]);

m = Integer.parseInt(s[1]);

q = new LinkedList<>();

in = new int[n+1];

for(int i = 1; i <= n ; i++) map.put(i, new ArrayList<>());

for (int i = 0 ; i < m ; i++){

String[] e = b.readLine().split("\\s+");

int x = Integer.parseInt(e[0]);

int y = Integer.parseInt(e[1]);

map.get(x).add(y);

in[y]++;

}

String res = topSort();

System.out.println(res == null ? "-1": res);

}

private static String topSort(){

List res = new ArrayList<>();

for(int i = 1; i <= n; i++){

if(in[i] == 0){

q.add(i);

}

}

while(!q.isEmpty()){

int node = q.poll();

res.add(node);

List list = map.get(node);

for (int i = 0; i < list.size(); i++){

int p = list.get(i);

if(--in[p] == 0) q.add(p);

}

}

if (res.size() != n) return null;

return res.stream().map(x->String.valueOf(x)).collect(Collectors.joining(" "));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值