今天刚学的拓扑排序,大概搞懂后发现这题是赤裸裸的水题。
于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了。。。
于是检查了一遍又交了一发,还是WA。。。
我还以为是用queue的问题,改成stack也WA,然后干脆放弃STL,手敲了队列,还是WA了。。。
我抓狂了。
感觉没什么问题的,卡了我一个多小时。最后用样例0 1测试,发现是在输入的循环判断时出错了,他要求两个都为0时结束,我只要有一个为0就结束了。。。
坑爹,血的教训。。。
然后我把之前的代码修改后都过了,还尝试了dfs。
于是:
用queue过的:
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 101;
int n, m;
int indegree[maxn] = {0}, gragh[maxn][maxn], res[maxn];
void topologic(void) {
queue <int> q;
int cnt = 0;
for (int i = 0; i < n; i++)
if (indegree[i] == 0)
q.push(i);
while (!q.empty()) {
int tmp = q.front();
q.pop();
res[cnt++] = tmp;
for (int i = 0; i < n; i++)
if (gragh[tmp][i] != 0)
if (--indegree[i] == 0)
q.push(i);
}//while
printf("%d", res[0] + 1);
for (int i = 1; i < cnt; i++)
printf(" %d", res[i] + 1);
printf("\n");
}
int main() {
while (scanf("%d%d", &n, &m) && (n || m)) {
memset(gragh, 0, sizeof(gragh));
memset(indegree, 0, sizeof(indegree));
int a, b;
for (int i = 0; i < m; i++) {
scanf("%d%d", &a, &b);
gragh[a-1][b-1] = 1;
indegree[b-1]++;
}//for input
/*
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
printf("%d ", gragh[i][j]);
printf("\n");
}
for (int i = 0; i < n; i++)
printf("%d ", indegree[i]);
printf("\n");
*/
topologic();
}//while
return 0;
}
手敲队列:
#include <cstdio>
#include <cstring>
const int maxn = 101;
int g[maxn][maxn], id[maxn], q[maxn];
int main() {
// freopen("in", "r", stdin);
int n, m, a, b, tmp;
int front, tail;
while (scanf("%d%d", &n, &m)) {
if (n == 0 && m == 0)
break;
memset(g, 0, sizeof(g));
memset(id, 0, sizeof(id));
front = tail = 0;
for (int i = 0; i < m; i++) {
scanf("%d%d", &a, &b);
g[a][b] = 1;
id[b]++;
}
for (int i = 1; i <= n; i++)
if (id[i] == 0)
q[tail++] = i;
while (tail != front) {
tmp = q[front++];
if (front == 1)
printf("%d", tmp);
else
printf(" %d", tmp);
for (int i = 1; i <= n; i++)
if (g[tmp][i] != 0)
if (--id[i] == 0)
q[tail++] = i;
}//while
printf("\n");
}//while
return 0;
}
dfs方法:
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 101;
int n, m, t;
int gragh[maxn][maxn], res[maxn], c[maxn];
bool dfs(int u) {
c[u] = -1;
for (int v = 0; v < n; v++)
if (gragh[u][v])
if (c[v] < 0)
return false;
else if (!c[v] && !dfs(v))
return false;
c[u] = 1;
res[--t] = u;
return true;
}
bool toposort() {
t = n;
memset(c, 0, sizeof(c));
for (int u = 0; u < n; u++)
if (!c[u])
if (!dfs(u))
return false;
return true;
}
int main() {
while (scanf("%d%d", &n, &m) && (n || m)) {
memset(gragh, 0, sizeof(gragh));
int a, b;
for (int i = 0; i < m; i++) {
scanf("%d%d", &a, &b);
gragh[a-1][b-1] = 1;
}//for input
toposort();
for (int i = 0; i < n; i++)
printf("%d ", res[i] + 1);
printf("\n");
}//while
return 0;
}
这次是血淋淋的教训啊:
一、输入部分一定要提前测试
二、测试数据要多一点,多想些特殊测试点
三、必须提高敲题效率。
分享到:
相关推荐
XZ-Ordering曲线提供了一种解决方案,它通过独特的编码和排序策略,可以将空间数据转换为数据库能够理解的形式。 使用空间填充曲线,如Z-ordering和Hilbert曲线,尽管可以在一定程度上实现空间信息的索引,但它们...
Lamport的这篇论文《Time-Clocks-and-the-Ordering-of-Events-in-a-Distributed-System》提出了一种利用逻辑时钟来解决分布式系统中事件排序问题的方法。论文通过定义分布式系统中事件的部分顺序和总顺序,详细阐述...
文件标题 "The-Totem-Single-Ring-Ordering-and-Membership-Protocol.pdf" 暗示了本文档主要讨论的主题是一个名为 "Totem" 的单环排序与成员协议。这个协议被设计用于分布式系统中,以确保在广播域内的处理器集合上...
本文将深入探讨“online-food-ordering-system-源码.rar”中包含的源代码,解析其核心功能和架构,以帮助读者理解此类系统的实现原理。 1. 系统架构 在线订餐系统通常基于三层架构:表现层(前端)、业务逻辑层...
随着时间的推移,尤其是在2014年到2015年期间,社区开始拥有更多工具和方法来帮助验证内存排序,包括litmus测试和专门的分析工具,这些工具能够更有效地检测和预防内存排序相关的错误。 内存屏障是实现内存排序的...
formatted-task010-mctaco-answer-generation-event-ordering.json
formatted-task009-mctaco-question-generation-event-ordering.json
formatted-task011-mctaco-wrong-answer-generation-event-ordering.json
DenseNet-40-12-Tensorflow-Backend-TF-dim-ordering.h5 训练完imagenet的权重文件,用此转移学习
为降低移动对象资源的紧张程度,设计了区间计时算法和临界点信息处理算法以降低通信频率,减少响应次数,增强组查询的实时性。在模拟实验中,组查询算法有效降低了移动物体的CPU资源紧张程度和无线通信代价。
ResNet50v2 官方模型,下载地址:https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50v2_weights_tf_dim_ordering_tf_kernels.h5
假设给我们一个任意的图,它可能是也可能不是DAG(有向无圈图),推广拓扑排序算法,以使得给定有向图G的输入,它的输出是以下两者之一: (a) 一个拓扑排序,于是确定了G为DAG; 或者 (b) G中的一个圈,于是确定了G...
假设给我们一个任意的图,它可能是也可能不是DAG(有向无圈图),推广拓扑排序算法,以使得给定有向图G的输入,它的输出是以下两者之一: (a) 一个拓扑排序,于是确定了G为DAG; 或者 (b) G中的一个圈,于是确定了G...
model weight in this repo https://github.com/fchollet/deep-learning-models Keras提供的预训练权重
在压缩包`dynamic-column-ordering-master`中,很可能包含了实现这个功能的源代码,包括示例数据、排序算法和与DOM交互的函数。通过阅读和学习这个项目,你可以深入理解如何在JavaScript中实现动态列排序。 总的来...
本篇文章将深入探讨“Restaurant-Menu-Ordering-System”这一开源项目,揭示其背后的编程思想和技术栈。 首先,"Restaurant-Menu-Ordering-System"是一个专门为餐厅设计的菜单点餐系统,它允许顾客通过数字化的方式...
pytest排序pytest插件以特定顺序运行测试 您是否曾经想过在进行任何其他测试之前轻松运行其中一项测试? 还是最后运行一些测试? 还是先执行一项测试,再执行另一项测试? 还是确保这组测试在另一组测试之后运行? ...
TSLint导入组排序规则 强制进口组订购 高度可配置 使用正则表达式配置哪些导入语句进入哪个导入组。 支持确定package.json依赖项(或从node_modules读取所有依赖node_modules ) 有一个自动修复程序 保留评论 ...
Just-pepperoni-app-ordering-api Just Pepperoni的订购系统的API服务 在Node v15.12.0上运行 设置 您的环境将需要安装节点和npm: ://nodejs.org/en/准备好环境后,打开命令行界面(CLI)并运行以下命令(假设您...
"morpheme-ordering-writeup"这个标题可能指的是一个关于语素排序算法或方法的研究报告、论文或者代码实现的文档。这个主题通常会在语言学、计算机科学,尤其是自然语言处理的交叉领域出现。在描述中提到的"语素排序...