Good Bye 2014 B. New Year Permutation(floyd )
题目链接
题意:给n个数,要求这n个数字小的尽量放到前面,求一个最小的。
给一个矩阵s[i][j]==1,表示位置 i 的数字可以和 位置 j 的数字交换。
分析:
刚开始用的是3个循环,每次都找一个能直接连接的最小的放到前面,过了小数据,快结束的时候被hack了。
其实不应该这么做,因为还有间接相连提前交换的最小的解。 正解是用floyd,先预先处理出来同一堆,也就是
直接和间接相连的所有 标记,然后根据标记从前向后找最小的。
这个题也可以用并查集做,当时想到了,感觉B题的程度应该考虑暴力神马的,结果随便写了一下也没对。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <cstdlib> 6 #include <algorithm> 7 #define LL __int64 8 const int maxn = 1e3 + 10; 9 using namespace std; 10 char s[maxn][maxn]; 11 int a[maxn], f[maxn][maxn]; 12 13 int main() 14 { 15 int i, j, n, k; 16 while(~scanf("%d", &n)) 17 { 18 memset(f, 0, sizeof(f)); 19 for(i = 0; i < n; i++) 20 scanf("%d", &a[i]); 21 for(i = 0; i < n; i++) 22 { 23 getchar(); 24 scanf("%s", s[i]); 25 for(j = 0; j < n; j++) 26 if(s[i][j]=='1') 27 f[i][j] = 1; 28 } 29 30 for(k = 0; k < n; k++) 31 for(i = 0; i < n; i++) 32 for(j = 0; j < n; j++) 33 if(f[i][k] && f[k][j]) 34 f[i][j] = 1; 35 36 for(i = 0; i < n; i++) 37 for(j = i+1; j < n; j++) 38 if(f[i][j] && a[i]>a[j]) 39 swap(a[i], a[j]); 40 41 for(i = 0; i < n; i++) 42 { 43 if(i == n-1) cout<<a[i]<<endl; 44 else printf("%d ", a[i]); 45 } 46 } 47 return 0; 48 }
转载于:https://www.cnblogs.com/bfshm/p/4196925.html
Good Bye 2014 B. New Year Permutation(floyd )相关推荐
- 弗洛伊德算法(Floyd)简介
弗洛伊德算法(Floyd)简介 Floyd算法适用于解决求最短路径问题,相比于Digkstra算法思路更加简单,更容易理解,但是效率会明显低很多,可以作为初步学习的一种方法. 目录 弗洛伊德算法(Fl ...
- 【算法】弗洛伊德(Floyd)算法
这个算法主要要弄懂三个循环的顺序关系. 弗洛伊德(Floyd)算法过程: 1.用D[v][w]记录每一对顶点的最短距离. 2.依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否 ...
- 七、最短路径——弗洛伊德(Floyd)算法
为了能讲明白弗洛伊德(Floyd)算法的精妙所在,我们先来看最简单的案例.下图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[3][3]和P[3][3],D代表顶点到顶点的最短路径权值和的 ...
- 【数据结构】图—弗洛伊德(Floyd)算法
前言 上文介绍了迪杰斯特拉(Dijkstra)算法,计算网图的某个源点到其余各个顶点的最短路径问题(边权值为非负值),本文介绍另一个求最短路径的算法--弗洛伊德算法,它是计算所有顶点到所有顶点的最短路 ...
- 弗洛伊德(Floyd)算法之两点之间的最短距离问题
1.概述 (1)与迪杰斯特拉(Dijkstra)算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法,该算法 名称以创始人之一.1978 年图灵奖获得者.斯坦福大学计 ...
- 最短路径之弗洛伊德算法(Floyd)——动态规划
弗洛伊德算法(Floyd)主要针对多源最短路径,且可以解决路径中有负权的情况(不包含负权回路),但是迪杰斯特拉算法只能解决正权值的单源最短路径(可以迭代多次求多源). 1.弗洛伊德算法的基本思想 弗洛 ...
- 算法系列——弗洛伊德算法(Floyd)
本系列旨在用简单的人话讲解算法,尽可能避免晦涩的定义,读者可以短时间内理解算法原理及应用细节.我在努力! 本篇文章编程语言为Python,供参考. 弗洛伊德算法(Floyd) 典型最短路径算法.用于计 ...
- 大话数据结构-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)
6 最短路径 最短路径,对于图来说,是两顶点之间经过的边数最少的路径:对于网来说,是指两顶点之间经过的边上权值之和最小的路径.路径上第一个顶点为源点,最后一个顶点是终点. 6.1 迪杰斯特拉(Di ...
- 数据结构——图——弗洛伊德(Floyd)算法
数据结构--图--弗洛伊德(Floyd)算法 为了能讲明白弗洛伊德(Flbyd)算法的精妙所在,我们先来看最简单的案例.图7-7-12的左图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[ ...
最新文章
- C语言易错题--将一个整数转换为六进制打印
- python代码打印二叉树某一特定层的节点
- 前台特效(9)无限极分类折叠菜单
- DataGrid多行数据的展示和编辑(6)
- js 获取json数组里面数组的长度
- git提交到github总是要输入密码_GitHub不为人知的秘密
- linux系统修改为静态IP地址
- 6 月 4 日!苹果 WWDC 2018 或重点推出 iOS 12 系统
- 【Fastboot】给android刷整个系统和系统某个单独模块的方法
- 机器人布罩_机器人防护罩的主要作用是什么?
- 机器人编程和python的区别_乐高机器人编程和计算机编程的区别
- UML (统一建模语言) 各种图总结
- 马克思主义基本原理习题册
- 模拟行走机器人-c语言
- oeasy教您玩转vim - 005 - # 程序本质
- 数字选择器NumberPicker使用教程
- 【281期】面试官问:淘宝七天自动确认收货,可以怎么实现?
- 无法启动计算机的病毒是,电脑病毒导致系统中的exe文件无法打开如何解决
- mysql 未找到 WinSxS_清理WinSxs释放 Win7 C盘所占的空间
- 论文翻译 | TOOD:《TOOD: Task-aligned One-stage Object Detection》详细解读