mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 15:09:40 +08:00
添加 卡码网0117.软件构建 JS版
This commit is contained in:
@ -193,7 +193,7 @@
|
|||||||
|
|
||||||
理解思想后,确实不难,但代码写起来也不容易。
|
理解思想后,确实不难,但代码写起来也不容易。
|
||||||
|
|
||||||
为了每次可以找到所有节点的入度信息,我们要在初始话的时候,就把每个节点的入度 和 每个节点的依赖关系做统计。
|
为了每次可以找到所有节点的入度信息,我们要在初始化的时候,就把每个节点的入度 和 每个节点的依赖关系做统计。
|
||||||
|
|
||||||
代码如下:
|
代码如下:
|
||||||
|
|
||||||
@ -451,6 +451,80 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
### Javascript
|
### Javascript
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const r1 = require('readline').createInterface({ input: process.stdin });
|
||||||
|
// 创建readline接口
|
||||||
|
let iter = r1[Symbol.asyncIterator]();
|
||||||
|
// 创建异步迭代器
|
||||||
|
const readline = async () => (await iter.next()).value;
|
||||||
|
|
||||||
|
|
||||||
|
let N, M // 节点数和边数
|
||||||
|
let inDegrees = [] // 入度
|
||||||
|
let umap = new Map() // 记录文件依赖关系
|
||||||
|
let result = [] // 结果
|
||||||
|
|
||||||
|
|
||||||
|
// 根据输入, 初始化数据
|
||||||
|
const init = async () => {
|
||||||
|
// 读取第一行输入
|
||||||
|
let line = await readline();
|
||||||
|
[N, M] = line.split(' ').map(Number)
|
||||||
|
|
||||||
|
inDegrees = new Array(N).fill(0)
|
||||||
|
|
||||||
|
// 读取边集
|
||||||
|
while (M--) {
|
||||||
|
line = await readline();
|
||||||
|
let [x, y] = line.split(' ').map(Number)
|
||||||
|
|
||||||
|
// 记录入度
|
||||||
|
inDegrees[y]++
|
||||||
|
|
||||||
|
// 记录x指向哪些文件
|
||||||
|
if (!umap.has(x)) {
|
||||||
|
umap.set(x, [y])
|
||||||
|
} else {
|
||||||
|
umap.get(x).push(y)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
// 根据输入, 初始化数据
|
||||||
|
await init()
|
||||||
|
|
||||||
|
let queue = [] // 入度为0的节点
|
||||||
|
for (let i = 0; i < N; i++) {
|
||||||
|
if (inDegrees[i] == 0) {
|
||||||
|
queue.push(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (queue.length) {
|
||||||
|
let cur = queue.shift() //当前文件
|
||||||
|
|
||||||
|
result.push(cur)
|
||||||
|
|
||||||
|
let files = umap.get(cur) // 当前文件指向的文件
|
||||||
|
|
||||||
|
// 当前文件指向的文件入度减1
|
||||||
|
if (files && files.length) {
|
||||||
|
for (let i = 0; i < files.length; i++) {
|
||||||
|
inDegrees[files[i]]--
|
||||||
|
if (inDegrees[files[i]] == 0) queue.push(files[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 这里result.length == N 一定要判断, 因为可能存在环
|
||||||
|
if (result.length == N) return console.log(result.join(' '))
|
||||||
|
console.log(-1)
|
||||||
|
})()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### TypeScript
|
### TypeScript
|
||||||
|
|
||||||
### PhP
|
### PhP
|
||||||
|
Reference in New Issue
Block a user