Pers.narod.ru. Алгоритмы. Расстановка слонов и ладей на шахматной доске |
Разместить на шахматной доске максимальное количество слонов и ладей так, чтобы они не находились друг у друга " под боем".
Будем вводить количество слонов и определять для него количество ладей. Результат выдадим как консольную картинку.
#include <stdio.h> #include <conio.h> #include <dos.h> char b[8][8]; void Print (void) { int i,j; clrscr(); for (i=0; i<8; i++) { for (j=0; j<8; j++) { if ((b[i][j]=='С') || (b[i][j]=='Л')) textcolor (RED); else textcolor (LIGHTGRAY); cprintf ("%1c",b[i][j]); } printf ("\n"); } delay (100); } int Slon (int x,int y) { int i; for (i=0; i<8; i++) if (b[i][y]=='С') return 1; for (i=0; i<8; i++) if (b[x][i]=='С') return 1; return 0; } int Lad (int x0,int y0) { int x,y; x=x0; y=y0; do { if (b[x][y]=='Л') return 1; x--; y++; } while ((x>=0) && (y<8)); x=x0; y=y0; do { if (b[x][y]=='Л') return 1; x--; y--; } while ((x>=0) && (y>=0)); x=x0; y=y0; do { if (b[x][y]=='Л') return 1; x++; y--; } while ((x<8) && (y>=0)); x=x0; y=y0; do { if (b[x][y]=='Л') return 1; x++; y++; } while ((x<8) && (y<8)); return 0; } void AddLad (int x,int y) { int i; b[x][y]='Л'; for (i=0; i<8; i++) if (i!=x) b[i][y]='X'; for (i=0; i<8; i++) if (i!=y) b[x][i]='X'; } void AddSlon (int x0,int y0) { int x,y; b[x0][y0]='С'; x=x0-1; y=y0+1; while ((x>=0) && (y<8)) { b[x][y]='X'; x--; y++; }; x=x0-1; y=y0-1; while ((x>=0) && (y>=0)) { b[x][y]='X'; x--; y--; }; x=x0+1; y=y0-1; while ((x<8) && (y>=0)) { b[x][y]='X'; x++; y--; }; x=x0+1; y=y0+1; while ((x<8) && (y<8)) { b[x][y]='X'; x++; y++; }; } void main (void) { int x,y,i,j,lr,sr,l,s; textmode(C40); printf ("\n Расстановка ладей и слонов"); do { printf ("\n Введите количество ладей [1-7]"); fflush (stdin); scanf ("%d",&l); } while (!((l>0) && (l<8))); for (i=0; i<8; i++) for (j=0; j<8; j++) b[i][j]='¦'; Print(); s=8-l; lr=sr=0; do { if (lr<l) { for (x=0; x<8; x++) for (y=0; y<8; y++) if ((b[x][y]=='¦') && (!Slon(x,y))) { AddLad (x,y); lr++; Print(); goto m10; } } m10: if (sr<s) { for (x=0; x<8; x++) for (y=0; y<8; y++) if ((b[x][y]=='¦') && (!Lad(x,y))) { AddSlon (x,y); sr++; Print(); goto m20; } } m20: } while (lr+sr<8); i=0; j=0; do { if (b[i][j]=='¦') { if (!Slon(i,j)) { AddLad (i,j); lr++; Print(); } else if (!Lad (i,j)) { AddSlon (i,j); sr++; Print(); } } j++; if (j==8) { j=0; i++; if (i==8) break; } } while (1); gotoxy (1,10); printf ("\n Л - ладья, С - слон"); fflush (stdin); getch(); textmode(C80); }
Архив ZIP с файлами (14 Кб)
гостевая; E-mail |