CodeKata Bus Routes
10077 ワード
質問リンク
Bus Routes - LeetCode
問題を解く
問題はバスですが、地下鉄で考えて解決しました.routes
は2 D配列、1 Dインデックスは円弧、各配列の要素はドメインの名前です.map
により、各局がどの弧に含まれているか、始局の弧をq
に入れるとともに、各弧が何回乗り換えたかをチェックするdist
度の初期値を入れる.
BFSはqから出る要素が弧なので、繰り返しゲートを通ってその弧の駅をずっと回り、target
駅ならreturn
です.そして各局を経て、その局がどの線に含まれているかを決定した後、dist
の値を比較することによって、その局が別の線に含まれているか否かを決定する.
マイコード var numBusesToDestination = function (routes, source, target) {
if (source === target) return 0;
const map = new Map();
const dist = new Map();
const q = [];
for (let i = 0; i < routes.length; ++i)
for (let j = 0; j < routes[i].length; ++j) {
const tmp = map.get(routes[i][j]) || [];
tmp.push(i);
map.set(routes[i][j], tmp);
if (routes[i][j] === source) {
dist.set(i, 1);
q.push(i);
}
}
while (q.length) {
const lane = q.shift();
const val = dist.get(lane);
for (let i = 0; i < routes[lane].length; ++i) {
if (routes[lane][i] === target) return val;
const otherLanes = map.get(routes[lane][i]);
for (let j = 0; j < otherLanes.length; ++j) {
const nextDist = dist.get(otherLanes[j]);
if (nextDist === undefined || nextDist > val + 1) {
q.push(otherLanes[j]);
dist.set(otherLanes[j], val + 1);
}
}
}
}
return -1;
};
Reference
この問題について(CodeKata Bus Routes), 我々は、より多くの情報をここで見つけました
https://velog.io/@coolchaeyoung/CodeKata-Bus-Routes
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
問題はバスですが、地下鉄で考えて解決しました.
routes
は2 D配列、1 Dインデックスは円弧、各配列の要素はドメインの名前です.map
により、各局がどの弧に含まれているか、始局の弧をq
に入れるとともに、各弧が何回乗り換えたかをチェックするdist
度の初期値を入れる.BFSはqから出る要素が弧なので、繰り返しゲートを通ってその弧の駅をずっと回り、
target
駅ならreturn
です.そして各局を経て、その局がどの線に含まれているかを決定した後、dist
の値を比較することによって、その局が別の線に含まれているか否かを決定する.マイコード var numBusesToDestination = function (routes, source, target) {
if (source === target) return 0;
const map = new Map();
const dist = new Map();
const q = [];
for (let i = 0; i < routes.length; ++i)
for (let j = 0; j < routes[i].length; ++j) {
const tmp = map.get(routes[i][j]) || [];
tmp.push(i);
map.set(routes[i][j], tmp);
if (routes[i][j] === source) {
dist.set(i, 1);
q.push(i);
}
}
while (q.length) {
const lane = q.shift();
const val = dist.get(lane);
for (let i = 0; i < routes[lane].length; ++i) {
if (routes[lane][i] === target) return val;
const otherLanes = map.get(routes[lane][i]);
for (let j = 0; j < otherLanes.length; ++j) {
const nextDist = dist.get(otherLanes[j]);
if (nextDist === undefined || nextDist > val + 1) {
q.push(otherLanes[j]);
dist.set(otherLanes[j], val + 1);
}
}
}
}
return -1;
};
Reference
この問題について(CodeKata Bus Routes), 我々は、より多くの情報をここで見つけました
https://velog.io/@coolchaeyoung/CodeKata-Bus-Routes
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
var numBusesToDestination = function (routes, source, target) {
if (source === target) return 0;
const map = new Map();
const dist = new Map();
const q = [];
for (let i = 0; i < routes.length; ++i)
for (let j = 0; j < routes[i].length; ++j) {
const tmp = map.get(routes[i][j]) || [];
tmp.push(i);
map.set(routes[i][j], tmp);
if (routes[i][j] === source) {
dist.set(i, 1);
q.push(i);
}
}
while (q.length) {
const lane = q.shift();
const val = dist.get(lane);
for (let i = 0; i < routes[lane].length; ++i) {
if (routes[lane][i] === target) return val;
const otherLanes = map.get(routes[lane][i]);
for (let j = 0; j < otherLanes.length; ++j) {
const nextDist = dist.get(otherLanes[j]);
if (nextDist === undefined || nextDist > val + 1) {
q.push(otherLanes[j]);
dist.set(otherLanes[j], val + 1);
}
}
}
}
return -1;
};
Reference
この問題について(CodeKata Bus Routes), 我々は、より多くの情報をここで見つけました https://velog.io/@coolchaeyoung/CodeKata-Bus-Routesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol