我正在尝试在 MATLAB中实现“ Sprague-Grundy 定理”。这个定理本质上试图找到数组中的最小排除元素,例如在数组 [0 1 3 4 5] 中,该值将是 2。除此之外,该函数需要能够沿不同行递归矩阵(特别是图论中的邻接矩阵)例如,如果我有邻接矩阵:
1 0 0 0 0
1 0 0 0 0
0 0 0 1 0
0 1 0 0 0
0 0 1 0 0
如果我将此矩阵用作输入,并且函数从第 5 行开始,那么它将遍历“0 0 1 0 0”行,当它在第 3 列中看到 1 时,该函数将递归到第 3 行行,然后递归到第 4 个,然后是第 2 个,然后是第 1 个。
我遇到的问题是在函数输入为matrix/array的情况下进行递归。我认为当函数输入是整数时递归很简单,但是对于矩阵/数组,我不知道如何“跟踪”值并获得我想要的最终数组。到目前为止,这是我的 matlab 代码:
function [ y ] = S_Grundy( X,r,m )
% Recursively finds the SG value given an adj matrix,
Row_ones = find(X(r,:) == 1)
y=0.*size(Row_ones,2);
% if(numel(Row_ones)==0)
% y(:)=0;
% return
% end
for i=1:size(Row_ones,2)
if(Row_ones(i) >= m)
y = S_Grundy(X,Row_ones(i),m);
end
end
if (Row_ones(i) < m)
for j=0:max(Row_ones)
if(isempty(find(Row_ones==j)));%&&(isempty(find(Row_ones==0))))
y(i)=j;
else
y(i)=777;
% if(isempty(find(Row_ones==j)))
% y(i)=j;
% end
end
end
end
end