%%%%%%%%%%%% CORRIGE FOURMI DE LANGTON %%%%%%%%%%%%%% clear all clf global N N=80; m=zeros(N,N); for i=1:N for j=1:N affiche_cellule(i,j,'g') end end fi=round(N/2); fj=fi; fd=0; affiche_cellule(fi,fj,'r') axis equal axis off drawnow hold on cpt=0; ok=1; while ok [m,fi,fj,fd,ok]=deplacement(m,fi,fj,fd); cpt=cpt+1; end cpt function affiche_cellule(i,j,couleur) rectangle('Position',[i,j,1,1],'facecolor',couleur,'EraseMode','none') line([i,i+1],[j,j],'color',couleur,'EraseMode','none') line([i,i+1],[j+1,j+1],'color',couleur,'EraseMode','none') line([i,i],[j,j+1],'color',couleur,'EraseMode','none') line([i+1,i+1],[j,j+1],'color',couleur,'EraseMode','none') function [m,fi,fj,fd,ok]=deplacement(m,fi,fj,fd) ok=1; m(fi,fj)=1-m(fi,fj); if m(fi,fj)==0 coul='g'; else coul='b'; end affiche_cellule(fi,fj,coul); switch fd case 0 fi=fi+1; case 1 fj=fj+1; case 2 fi=fi-1; case 3 fj=fj-1; end if valide(fi,fj) if m(fi,fj)==0 fd=mod(fd-1,4); else fd=mod(fd+1,4); end affiche_cellule(fi,fj,'r') else ok=0; end function oui=valide(i,j) oui = i>=1 & i<=N & j>=1 & j<=N; %%%%%%%%%%%%%% CORRIGE PERCOLATION %%%%%%%%%%%% clear all rand('state',sum(100*clock)); global n M f n=80; M=zeros(n,n); M(ceil(n/2),ceil(n/2))=1; fin=false; affiche2; while ~fin propagation; affiche2; fin=test2; end function affiche2() global M clf spy(M==0,'b'); hold on spy(M==2,'k'); drawnow function propagation() global M n seuil=0.5; T=M; for i=1:n for j=1:n if T(i,j)==1 feu(i,j,i-1,j,T); feu(i,j,i,j+1,T); feu(i,j,i+1,j,T); feu(i,j,i,j-1,T); M(i,j)=2; end end end function feu(i,j,ii,jj,T) global M seuil=0.5; if valide(ii,jj) & T(ii,jj)==0 & rand=1 & i<=n & j>=1 & j<=n; function ok=test2() global M ok=sum(sum(M==1))==0;