Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ce3995c

Browse files
添加 卡码网0117.软件构建 JS版
1 parent e37fe67 commit ce3995c

File tree

1 file changed

+75
-1
lines changed

1 file changed

+75
-1
lines changed

‎problems/kamacoder/0117.软件构建.md‎

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@
193193

194194
理解思想后,确实不难,但代码写起来也不容易。
195195

196-
为了每次可以找到所有节点的入度信息,我们要在初始话的时候,就把每个节点的入度 和 每个节点的依赖关系做统计。
196+
为了每次可以找到所有节点的入度信息,我们要在初始化的时候,就把每个节点的入度 和 每个节点的依赖关系做统计。
197197

198198
代码如下:
199199

@@ -451,6 +451,80 @@ if __name__ == "__main__":
451451

452452
### Javascript
453453

454+
```javascript
455+
const r1 = require('readline').createInterface({ input: process.stdin });
456+
// 创建readline接口
457+
let iter = r1[Symbol.asyncIterator]();
458+
// 创建异步迭代器
459+
const readline = async () => (await iter.next()).value;
460+
461+
462+
let N, M // 节点数和边数
463+
let inDegrees = [] // 入度
464+
let umap = new Map() // 记录文件依赖关系
465+
let result = [] // 结果
466+
467+
468+
// 根据输入, 初始化数据
469+
const init = async () => {
470+
// 读取第一行输入
471+
let line = await readline();
472+
[N, M] = line.split(' ').map(Number)
473+
474+
inDegrees = new Array(N).fill(0)
475+
476+
// 读取边集
477+
while (M--) {
478+
line = await readline();
479+
let [x, y] = line.split(' ').map(Number)
480+
481+
// 记录入度
482+
inDegrees[y]++
483+
484+
// 记录x指向哪些文件
485+
if (!umap.has(x)) {
486+
umap.set(x, [y])
487+
} else {
488+
umap.get(x).push(y)
489+
}
490+
}
491+
}
492+
493+
(async function () {
494+
// 根据输入, 初始化数据
495+
await init()
496+
497+
let queue = [] // 入度为0的节点
498+
for (let i = 0; i < N; i++) {
499+
if (inDegrees[i] == 0) {
500+
queue.push(i)
501+
}
502+
}
503+
504+
while (queue.length) {
505+
let cur = queue.shift() //当前文件
506+
507+
result.push(cur)
508+
509+
let files = umap.get(cur) // 当前文件指向的文件
510+
511+
// 当前文件指向的文件入度减1
512+
if (files && files.length) {
513+
for (let i = 0; i < files.length; i++) {
514+
inDegrees[files[i]]--
515+
if (inDegrees[files[i]] == 0) queue.push(files[i])
516+
}
517+
}
518+
}
519+
520+
// 这里result.length == N 一定要判断, 因为可能存在环
521+
if (result.length == N) return console.log(result.join(' '))
522+
console.log(-1)
523+
})()
524+
```
525+
526+
527+
454528
### TypeScript
455529

456530
### PhP

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /