Re: Вот вам и кyбик.. .

From
Oleg Khovayko ()
To
Oleg Khovayko
Date
2002-11-05T06:30:50Z
Area
RU.ALGORITHMS
From: Oleg Khovayko <olegh@hotpop.com>

Oleg Khovayko wrote:

> Завтра поправлю и опубликую исправленую версию.

Вот, ниже - исправленая версия. Извините за недоделку
в пред. версии. Что ни говори, а надо отучаться от привычки
начинать писать демо-программы, подобные этой, за 15 минут
до конца рабочего дня. Простите за доставленые пред. версией
неудобства. Ниже - исправленая и вроде как рабочая версия:

/*----------------------------------------------------*/

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

#define M 100
#define N 200

int glued_Y[] = {  0, 2, 1, -1 };
int glued_X[] = {  1, 1, 3, -1 };

/*----------------------------------------------------*/

char SQ[M][N];

char Cube_Step[4][6] = {
   { 2, 1, 5, 3, 0, 4 },
   { 3, 0, 2, 5, 4, 1 },
   { 4, 1, 0, 3, 5, 2 },
   { 1, 5, 2, 0, 4, 3 }
};

char X_Step[] = { 0, 1, 0, -1 };
char Y_Step[] = { 1, 0, -1, 0 };

/*----------------------------------------------------*/

void step(int y, int x, const char in_cube) {
   int dir;
   char mask = 1 << in_cube;

   if((x|y) < 0 || y >= M || x >= N || SQ[y][x] & mask || in_cube == 5)
     return;

   SQ[y][x] |= mask;

   if(SQ[M-1][N-1] == 0)
     for(dir = 0; dir < 4; dir++)
       step(y + Y_Step[dir], x + X_Step[dir], Cube_Step[dir][in_cube]);
} /* step */

/*----------------------------------------------------*/

void main() {
	int i;
     memset(&SQ, 0, M * N);

     for(i = 0; glued_X[i] >= 0; i++)
       SQ[glued_Y[i]][glued_X[i]] = -1;

     step(0, 0, 0);

     puts(SQ[M-1][N-1]? "Found way\n" : "No ways\n");
}

--- ifmail v.2.15dev5
 * Origin: Demos online service (2:5020/400)