Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Крестики-Нолики всё возможные варианты ходов. (https://forum.antichat.xyz/showthread.php?t=188157)

ZnikiR 18.03.2010 23:13

Крестики-Нолики всё возможные варианты ходов.
 
В общем тупо задался целью,написать прогу.
Но что-то никак не могу придумать алгоритм.
В общем идея такая.
Написать программу,которая просчитает и отобразить пошагово всё возможные ходы игры крестики-нолики 3х3.
Меня инттересуют именно всё варианты ходов.
Но вот уже 4 день ничего в голосу не идет.

AGENTWPC74 18.03.2010 23:18

Цитата:

Сообщение от ZnikiR
В общем тупо задался целью,написать прогу.
Но что-то никак не могу придумать алгоритм.
В общем идея такая.
Написать программу,которая просчитает и отобразить пошагово всё возможные ходы игры крестики-нолики 3х3.
Меня инттересуют именно всё варианты ходов.
Но вот уже 4 день ничего в голосу не идет.

ходов может быть 9х9=81 вариант ходов
если не ошибаюсь . вот и пиши алгоритм. если крестик в ячке 1 то нолик ставлю ы ячейку 2

BrainDeaD 18.03.2010 23:27

ошибаешься.

начать, думаю с того, что в игре существуют два вида пермутаций:
1) 5 крестиков и 4 нолика
2) 4 крестика и 5 ноликов

ZnikiR 18.03.2010 23:30

Цитата:

Сообщение от BrainDeaD
ошибаешься.

начать, думаю с того, что в игре существуют два вида пермутаций:
1) 5 крестиков и 4 нолика
2) 4 крестика и 5 ноликов

Нет это просто зависит от того кто первый ходит.
У меня тут мысли,просто есть 3 варианта первого хода,всё остальные ему идентичны.
Представим матрицу 3х3
Значит первый ход может быть 1х1 2х2 или 1х2,остальное это всё одно и тоже.
Вот я и думаю.Как отсекать похожие комбинации.

Delimiter 18.03.2010 23:35

вызвать функцию :) все варианты естественно включают и одинаковые .....

варианты хода считаются разными на том основании что ходы делаются в разное время (что в теории игр не означает эквивалентными вариантами)
Код:

int a[3][3];
int step(int mode)
{
  int i,j,fl;
  for(i=0,fl=0;i<3;i++)
    for(j=0;j<3;j++)
    {
        if(a[i][j]==0)
        {
            a[i][j]=mode;
            step(mode*(-1));
            a[i][j]=0;
            fl=1;
        }
    }
  if(fl==0)
  {
      printf("\r\n===================\r\n");
      for(i=0;i<3;i++)
      {
          printf("*---*---*---*\r\n");
          for(j=0;j<3;j++)
          {
            switch(a[i][j])
            {
                case 0:
                      printf("|  ");
                      break;
                case 1:
                      printf("| X ");
                      break;
                case -1:
                      printf("| O ");
                      break;
            }
          }
          printf("|\r\n");
      } 
        printf("*---*---*---*\r\n");
  }
return 0;
}

а если тебе нужны все варианты ... то эта задача к теории игр вооообще не относится
представь себе что имеешь 10 битовое число ,то тебе нужно всего лишь выбрать все комбинации где количество битов 1 равно количеству 0 .... это заваулированное условие твоей задачи ...

BrainDeaD 18.03.2010 23:36

Цитата:

Сообщение от ZnikiR
Нет это просто зависит от того кто первый ходит.

я думал нужны ВСЕ возможные комбинации.

-Gory King- 18.03.2010 23:37

бля только что 2 голоса проиграл((

ZnikiR 18.03.2010 23:40

Да именно из-за приложения http://vkontakte.ru/app1741517 этим занялся.
В обычном варианте выиграть вообще не вариант,вот и решил посмотреть возможные варианты.

ZnikiR 18.03.2010 23:41

2 Delimiter Это мы получаем сразу итог,но я думаю про последовательно каждый щаг.

Delimiter 18.03.2010 23:46

хааааааааа ... ноу проблем
Код:

int a[3][3];
int step(int mode)
{
  int i,j,k,l,fl;
  for(i=0,fl=0;i<3;i++)
    for(j=0;j<3;j++)
    {
        if(a[i][j]==0)
        {
            a[i][j]=mode;
      printf("\r\n===================\r\n");
      for(k=0;k<3;k++)
      {
          printf("*---*---*---*\r\n");
          for(l=0;l<3;l++)
          {
            switch(a[k][l])
            {
                case 0:
                      printf("|  ");
                      break;
                case 1:
                      printf("| X ");
                      break;
                case -1:
                      printf("| O ");
                      break;
            }
          }
          printf("|\r\n");
      } 
        printf("*---*---*---*\r\n");

            step(mode*(-1));
            a[i][j]=0;
            fl=1;
        }
    }
return 0;
}

может тебе лучче сразу програмку которая играет написать?


Время: 11:42