Практика программирования (Бейсик, Си, Паскаль)




Дерево решений - часть 5


int x0=l,y0=2;

int from;

void main() {

strcpy(&tree[0][0],"BASIC*");

ind[0]=-l;

clrscr();

printf("Введите строку с исходной позицией - ");

scanf("%s",pos0);

for(from=0; from<nmax; from++) level();

poisk () ;

getch ();

}

//---------------------------------

void level() {

for{k=0; k<6; k++)

if(tree[from][k]=='*')break;

i=k/3; //номер строки

j=k%3; //номер столбца

change (i-1,j);

change(i+1,j);

change(i,j-1);

change(i,j+1); }

//-------------------------------------

void change(int i1, int j1) { char tmp,str2[7];

int n,kl;

if(il<0 || i1>l || jl<0 | | jl>2) return;

kl=il*3+jl;

strcpy(str2, (char*)street from][0]);

tmp=str2[k]; str2[k]=str2[kl]; str2[kl]=tmp;

for(n=0; n<nmax; n++)

if(strcmp(str2,(char*)&tree[n][0])==0) return;

ind[nmax] =f rom;

strcpy((char*)stree[n] [0] , str2);

nmax++;

}

//--------------------------------------

void poisk() { char *p;

p=Stree[0][0] ;

for(int q=0; q<nmax; q++)

if(strcmp(pos0,p+q*7)==0) goto m;

printf("\n Эта позиция не сводится к требуемой");

return;

m:

print_tab(p+q*7) ;

q=ind[q];

if(q>=0) goto m;

return;

}

//-------------------------------------------

void print_tab(char* s) { char top[]= "+-+-+-+";

charmid[]= "+-+-+-+";

char bottom[]="+-+-+-+";

gotoxy(x0,y0);

printf("%s",top);

gotoxy(x0,y0+l) ;

printf("|%c|%c!%c|",s [0],s [1],s [2]);

gotoxy(x0,y0+2);

printf("%s", mid);

gotoxy(x0,y0+3);

printf(";%ci%ci%c!",s[3],s[4],s[5]);

gotoxy(x0,y0+4);

printf("%s",bottom);

x0=x0+10;

if(x0==81){y0=y0+5;x0=l;} }

Программа 6_01.pas

program basic; uses Crt;

var

tree:array [0..359] of string[6];

pos0:string[6];

ind:array [0..359] of integer;

x0,y0,i,j,k,nmax,from:integer;

procedure print_tab(s:string);

begin

gotoxy(x0,y0);

write{'+-+-+-+' );

gotoxy(x0,y0+1);

write {' |',s[l],'|',s[2],'|',s[3],'|');




Содержание  Назад  Вперед