Finish 2011-11-09 12:00:00 UTC

Version 1

by apmk

Status: Failed
Results: Failed (timeout)

Comments
Please login or create a profile.
Code
function [moves,vine]=solver(board, limit)
%function [moves,vine]=solver()
% greedy - no moves

[m,n] = size(board);
max_board = max(max(board));
eb = zeros(m+2,n+2);
eb(2:m+1,2:n+1) = board;
eb(1,:) = max_board+1;
eb(m+2,:) = max_board+1;
eb(:,1) = max_board+1;
eb(:,n+2) = max_board+1;

vb = zeros(m+2,n+2);
vb(1,:) = 1;
vb(m+2,:) = 1;
vb(:,1) = 1;
vb(:,n+2) = 1;
vb(find(eb(:)==0)) = 1;
max_cost = 0;
max_vine = [];

valid_nodes = find(eb(:)~=0 & vb(:)==0);

for i=1:length(valid_nodes)
    %display(i);
    current_node = valid_nodes(i);
    [cost,vine] = stage(current_node,vb,eb,0);
    if cost>max_cost
        max_cost = cost;
        max_vine = vine;
    end
end

max_vine = max_vine - (m+2);
max_vine = max_vine - 2*floor(max_vine/(m+2));
vine = max_vine - 1;
moves = [];
end


function [cost,vine] = stage(current_node,vb,eb,c)
	[m n] = size(vb);
	c = c + 1;
    neighbor_nodes = [current_node-m,current_node-1,current_node+1,current_node+m];
	neighbor_nodes = neighbor_nodes(find(vb(neighbor_nodes)==0)); 
	val = eb(current_node);
	neighbor_nodes = neighbor_nodes(find(eb(neighbor_nodes)<=val));
    [ignore idx] = max(eb(neighbor_nodes));
	neighbor_nodes = neighbor_nodes(idx);
    vb(current_node) = 1;
	max_cost = 0;
	max_vine = [];
    len = length(neighbor_nodes);
    if c>495 
        len = 0;
    end
	for i=1:len
        [future_cost future_vine] = stage(neighbor_nodes(i),vb,eb,c);
        if future_cost>max_cost
            max_cost = future_cost;
            max_vine = future_vine;
        end
	end            
	vine = [current_node,max_vine];
	cost = eb(current_node) + max_cost;
end