Vous êtes sur la page 1sur 2

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Ar

ial;}{\f1\fswiss\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue0;}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\cf1\f0\fs40 #include<io
steam.h>\par
#include<conio.h>\par
#include<stdio.h>\par
int C1[4][4],C2[4][4],Nr_min,H=0,i0,j0,i,j,cost1;\par
struct nod \{\par
\tab\tab\tab int C[4][4];\par
\tab\tab\tab int cost;\par
int iter; \par
\tab\tab\tab nod *urm;\par
\tab\tab\tab\};\par
nod prim,ultim;\par
nod L[30]; %lista configuratiilor obtinuta ca urmare a iteratiilor\par
\par
int costp(int A[4][4]) % costp calculeaza numarul de pozitii care nu sunt corec
te\par
\{ \par
int cost1=0;\par
for(int k=0;k<3;k++)\par
for(int m=0;m<3;m++)\par
if(A[i][j] != j+1+i*4) cost1++;\par
return cost1;\par
\}\par
\par
int adauga(int i1,int j1)\par
\{ int ok=0,N;\par
if ( (i0+i1>=0) && (i0+i1<=3) && (j0+j1>=0) && (j0+j1<=3) ) \par
\{ ok=1;\par
for(int k=0;k<3;k++)\par
for(int m=0;m<3;m++)\par
C2[k][m]=C1[k][m];\tab\par
C2[i0][j0]=C1[i0+i1][j0+j1];\par
C2[i0+i1][j0+j1]=16;\tab\par
N=costp(C2);\par
if (Nr_min>N)\par
Nr_min = N;\tab\par
\}\tab\par
return ok;\tab
\par
\}\par
\par
void main()\par
\{\par
int I=[-1,0,1,0];\par
int J=[0,1,0,-1];\par
for( i=0;i<3;i++)\par
for( j=0;j<3;j++)\par
\{\par
\tab cout<<"C1["<<i<<"]["<<j<<"]=";\par
\tab cin>>C1[i][j];
\par
\tab \}\par
Nr_min=costp(C1);\par
cost1=H+Nr_min;\par
prim.C=C1;\par
prim.cost=cost1;\par
prim.iter=H;\par
prim.urm=NULL;\par
ultim=NULL;\par

\par
while(Nr_min != 0)\par
\{ H++;\par
%identificam nodul ce contine configuratia care are costul Nr_min, retinem nodul
acesta intr-un nod auxiliar si il stergem din lista.\par
nod p;\par
p=prim;\par
while ( p != NULL )\par
\{ \par
\tab\tab if ( p.cost - p.iter == Nr_min)\par
\tab\tab\tab break; \par
p=p.urm;\par
\}\par
%sterge nodul p din lista\par
\{\}\par
%in prim.c cautam i0 j0 pozitia casutei albe\par
i0=0;\par
j0=0;\par
C1=p.C; % trebuie scrisa pe componente?\par
for( i=0;i<3;i++)\par
for( j=0;j<3;j++)\par
if ( C1[i][j] == 16)\par
\tab\tab\{ \par
\tab\tab i0=i;\par
\tab\tab j0=j;\par
\}\par
%adaugam posibilele noduri auxiliare\tab\par
for ( i=0 ; i<3 ; i++)\par
\{ if ( adauga(i0 + I[i], j0 + J[i]) != 0 )\par
\tab\tab %adauga nod nou in lista\par
\tab\tab\par
\tab\tab\{\par
\tab\tab p.C=C2; % trebuie scrisa pe componente?\par
p.cost=costp(C2) + H;\par
p.iter=H;\par
p.urm=NULL;\par
\tab\tab ultim.urm=p;\par
\tab\tab\}\par
\}\par
\} % end while\par
\} % end main\par
\par
\par
\par
\par
\par
\par
\par
\par
\cf0\f1\fs20\par
}

Vous aimerez peut-être aussi