私はこのPython関数をJavascriptに変換しようとしています。私はPythonを初めて使うので、構文のいくつかは私が暗号化するのが難しいです。ここでは元のコードとJS変換での私の試みの両方があります。私は何かを間違って解釈したことを知っています。なぜなら私の今のところは無限ループなのですから。括弧内のPython forループの構文
のPython:
'use strict';
const graph = [[0,1,0,0,1,0],[1,0,1,0,1,0],[0,1,0,1,0,0],[0,0,1,0,1,1],[1,1,0,1,0,0],[0,0,0,1,0,0],];
function N(vertex){
let c = 0;
const l = [];
for (let i in graph[vertex]){
if (i){
l.push(c);
c++;
}
}
return l;
}
function bronk(r,p,x){
if (p.length == 0 && x.length == 0){
console.log(r);
return;
}
for (let vertex in p.slice(0)){
const r_new = r.slice(0);
r_new.push(vertex);
const p_new=p.filter(val=>~~N(vertex).indexOf(val)); //here´s my best guess...
const x_new=x.filter(val=>~~N(vertex).indexOf(val));
bronk(r_new, p_new, x_new);
p=p.splice(vertex,1);
x.push(vertex);
}
}
bronk([], [0,1,2,3,4,5], []);
私はthis質問からPythonコードを持って:
graph = [[0,1,0,0,1,0],[1,0,1,0,1,0],[0,1,0,1,0,0],[0,0,1,0,1,1],[1,1,0,1,0,0],[0,0,0,1,0,0]]
def N(vertex):
c = 0
l = []
for i in graph[vertex]:
if i is 1 :
l.append(c)
c+=1
return l
def bronk(r,p,x):
if len(p) == 0 and len(x) == 0:
print r
return
for vertex in p[:]:
r_new = r[::]
r_new.append(vertex)
p_new = [val for val in p if val in N(vertex)] #this and
x_new = [val for val in x if val in N(vertex)] #this part was particularly difficult to understand
bronk(r_new,p_new,x_new)
p.remove(vertex)
x.append(vertex)
bronk([], [0,1,2,3,4,5], [])
そしてここでは、JSへの変換での私の試みです。
編集:私はES6環境で作業しています。
xをxにマッピングする目的は何ですか?これはマップを全く持たないのと同じではないでしょうか?だから私はまだPythonコードが何をしようとしているのかはまだ分かりません... –
私はマッピングを修正しましたが、アルゴリズムの再帰呼び出しはスタックサイズを超えています – danidee
'Array.splice'も位置によって削除されます、pythonの 'list.remove'のような値ではありません – danidee