当前位置: 首页 > news >正文

HD1285(拓扑排序)

package cn.hncu.dataStruct.search.topSort;

import java.util.Scanner;

public class Hdu1285 {
static Scanner sc = new Scanner(System.in);
static int n,m;
static int arc[][];//邻接矩阵,0不存在边,1存在边
static int sorted[];//表示是否已经排过序
static int degree[];//入度

public static void main(String[] args) {
while(sc.hasNext()){
n = sc.nextInt();
m = sc.nextInt();
init();//输入并初始化图
topSort();
}
}

private static void init() {
sorted = new int[n];
degree = new int[n];
arc = new int[n][n];//邻接矩阵,代表n个节点之间的有向边,0表示没有边
//初始化
for(int i=0;i<n;i++){
sorted[i] = 0;//未排序
degree[i] = 0;//每个节点的入度初始化为0
for(int j=0;j<n;j++){
arc[i][j]=0;
}
}

//图的输入---比赛胜负关系的输入
for(int i=0;i<m; i++){
int a = sc.nextInt()-1;
int b = sc.nextInt()-1;
if(arc[a][b]==0){//防止出现重边---把重边过滤掉
arc[a][b] = 1;
degree[b]++;
}
}
}

private static void topSort() {
int s = 0;//已经排序的节点个数
while(s<n){
int i=0;
for( i=0;i<n;i++){
if(degree[i]==0 && sorted[i]==0){//入度为0且还没有排序
break;
}
}
if(i==n){//已经没有节点可排了
System.out.println("图中存在回路,题目无解!");
return;
}
sorted[i]=1;//标记已排过
s++;
System.out.print(i+1);
if(s<n){
System.out.print(" ");
}else{
System.out.println();
}
//把以i为起点j为终点的那些边消掉---degree[j]-1
for(int j=0;j<n;j++){
if(arc[i][j]==1){
//arc[i][j]=0;//在矩阵上消边
degree[j]--;
}
}
}
}
}

转载于:https://www.cnblogs.com/1314wamm/p/5651642.html

相关文章:

  • 如何用javascript设置延时执行
  • 设计模式--3.模板方法模式
  • 实现JSP数据和JavaScript数据交互使用
  • 使用Apache Xerces解析XML文档
  • 禁ping以及清理系统多余账号说明
  • 使用dom4j和XPath解析XML之例子二
  • [改善Java代码]子列表只是原列表的一个视图
  • 使用Java自带SAX工具解析XML
  • 使用SAX解析XML (控制台程序)
  • PMI列子1
  • 一个简单实用的AJAX例子
  • VS使用技巧
  • 一个最简单的AJAX实例及解析
  • 静态库中有图片,改如何存放呢??
  • 用Java结合SAX 2.0 解析XML文档
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 3.7、@ResponseBody 和 @RestController
  • Android交互
  • Angular4 模板式表单用法以及验证
  • CentOS6 编译安装 redis-3.2.3
  • Fabric架构演变之路
  • JS变量作用域
  • Laravel 实践之路: 数据库迁移与数据填充
  • Markdown 语法简单说明
  • Redis中的lru算法实现
  • 分布式任务队列Celery
  • 基于webpack 的 vue 多页架构
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 容器服务kubernetes弹性伸缩高级用法
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 王永庆:技术创新改变教育未来
  • 新书推荐|Windows黑客编程技术详解
  • 一个项目push到多个远程Git仓库
  • 怎么把视频里的音乐提取出来
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 湖北分布式智能数据采集方法有哪些?
  • ​flutter 代码混淆
  • #pragma预处理命令
  • (007)XHTML文档之标题——h1~h6
  • (1)SpringCloud 整合Python
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (一)Java算法:二分查找
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net IOC框架入门之一 Unity
  • .NET 药厂业务系统 CPU爆高分析
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .skip() 和 .only() 的使用
  • [145] 二叉树的后序遍历 js
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [Flutter]打包IPA
  • [Grafana]ES数据源Alert告警发送