clear;
point = [5 25
5 20
5 15
5 10
5 5
25 20
25 15
25 10
25 5];
NUMBER = 9;
link = zeros(NUMBER,NUMBER);
link(1,6) = 1;
link(2,6) = 1;
link(2,7) = 1;
link(3,8) = 1;
link(3,9) = 1;
link(4,7) = 1;
link(5,6) = 1;
link(5,9) = 1;
for i = 1:NUMBER
for j = 1:NUMBER
if link(i,j)~=0
link(j,i) = link(i,j);
end
end
end
% plot(point(:,1),point(:,2),'ro');
% hold on
% for i = 1:NUMBER
% for j = 1:NUMBER
% if link(i,j) == 1
% plot([point(i,1),point(j,1)],[point(i,2),point(j,2)],'b');
% end
% end
% end
visited = zeros(1,NUMBER);
allcolor = zeros(1,NUMBER);
p = dfs(1,1,visited,allcolor,link,NUMBER);
color = zeros(1,NUMBER);
line = link;
for i = 1:NUMBER
for j = 1:NUMBER
if line(i,j)==0
line(i,j) = -1;
else
line(i,j) = 0;
end
end
end
stack = zeros(NUMBER,NUMBER);
links = ap(link,color,line,stack,NUMBER);
function x = dfs(v,color,visited,allcolor,link,NUMBER)
visited(v) = 1;
allcolor(v) = color;
for j = 1:NUMBER
disp(['v=',num2str(v),'j=',num2str(j)]);
if ~visited(j)&&link(v,j)
if ~dfs(j,1-color,visited,allcolor,link,NUMBER)
x = 0;
return
end
elseif link(v,j)&&allcolor(v) == allcolor(j)
x = 0;
return
end
end
x = 1;
return
end
function re = ap(link,color,line,stack,NUMBER)
sign = 0;
for i = 1:NUMBER
boolean = 0;
disp(['i=',num2str(i)]);
temp = i;
colors = color;
while colors(i)~=1
colors(i) = 1;
disp([num2str(i),'s着色']);
for j = 1:NUMBER
sign = 0;
if link(temp,j)==1 && line(temp,j) == boolean && color(j)==0
boolean = ~boolean;
stack(temp,j) = 1;
colors(j) = 1;
disp([num2str(j),'s着色']);
temp = j;
sign =1;
end
end
if sign == 0
disp(['boolean=',num2str(boolean)]);
if boolean == 1
disp(['sign=',num2str(0)]);
for k = 1:NUMBER
for l = 1:NUMBER
if stack(k,l)==1
line(k,l) = 1-line(k,l);
line(l,k) = line(k,l);
color(k) = 1;
color(l) = 1;
disp([num2str(k),'着色']);
disp([num2str(l),'着色']);
end
end
end
end
end
stack = zeros(NUMBER,NUMBER);
end
end
re = line;
end