function Pool=find_all_paths(Net,show)
N=Net.Nodes;
ii=1;
routePool={};
Pool={};
for i=1:40
path=Net.S;
cross=zeros(1,N);
cross(Net.S)=1;
while (1)
a=find(Net.connections(path(end),:)==1);
b=a(cross(a)==0);
if isempty(b)==1
break;
end
next=randsrc(1,1,b);
% WormHole Attack:
if next==2
path=[path,2,49,Net.D];
routePool{ii}=path;
ii=ii+1;
break;
elseif next==49
path=[path,49,2,Net.D];
routePool{ii}=path;
ii=ii+1;
break;
end
if cross(next)==0
path=[path,next];
cross(next)=1;
end
if path(end)==Net.D
routePool{ii}=path;
ii=ii+1;
break;
end
end
end
j=1;
for i=1:numel(routePool)
if isempty(routePool{i})==0
Pool{j}=routePool{i};
j=j+1;
end
end
for i=1:numel(Pool)-1
for k=i+1:numel(Pool)
if numel(Pool{i})== numel(Pool{k})
if sum(Pool{i}==Pool{k})==numel(Pool{k})
Pool{k}=[];
end
end
end
end
routePool=Pool;
Pool={};
j=1;
for i=1:numel(routePool)
if isempty(routePool{i})==0
Pool{j}=routePool{i};
j=j+1;
end
end
if show==1
for k=1:numel(Pool)
figure, plot(Net.position(1,:),Net.position(2,:),'ro');
hold on;
for i=1:numel(Pool{k})-1
line([Net.position(1,Pool{k}(i)),Net.position(1,Pool{k}(i+1))],[Net.position(2,Pool{k}(i)),Net.position(2,Pool{k}(i+1))]);
end
plot(Net.position(1,2),Net.position(2,2),'rs','LineWidth',3);
plot(Net.position(1,49),Net.position(2,49),'rs','LineWidth',3);
end
end
end