ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Крестики-Нолики всё возможные варианты ходов.
  #1  
Старый 18.03.2010, 23:13
ZnikiR
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме:
798217

Репутация: 44
Отправить сообщение для ZnikiR с помощью ICQ
По умолчанию Крестики-Нолики всё возможные варианты ходов.

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

  #2  
Старый 18.03.2010, 23:18
AGENTWPC74
Участник форума
Регистрация: 11.11.2009
Сообщений: 122
Провел на форуме:
609801

Репутация: 20
Отправить сообщение для AGENTWPC74 с помощью ICQ
По умолчанию

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

  #3  
Старый 18.03.2010, 23:27
BrainDeaD
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме:
3516666

Репутация: 439


По умолчанию

ошибаешься.

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

  #4  
Старый 18.03.2010, 23:30
ZnikiR
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме:
798217

Репутация: 44
Отправить сообщение для ZnikiR с помощью ICQ
По умолчанию

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

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

  #5  
Старый 18.03.2010, 23:35
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

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

варианты хода считаются разными на том основании что ходы делаются в разное время (что в теории игр не означает эквивалентными вариантами)
Код:
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 .... это заваулированное условие твоей задачи ...

Последний раз редактировалось Delimiter; 18.03.2010 в 23:42..
 
Ответить с цитированием

  #6  
Старый 18.03.2010, 23:36
BrainDeaD
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме:
3516666

Репутация: 439


По умолчанию

Цитата:
Сообщение от ZnikiR  
Нет это просто зависит от того кто первый ходит.
я думал нужны ВСЕ возможные комбинации.
 
Ответить с цитированием

  #7  
Старый 18.03.2010, 23:37
-Gory King-
Постоянный
Регистрация: 26.06.2009
Сообщений: 569
Провел на форуме:
2453356

Репутация: 50


Отправить сообщение для -Gory King- с помощью ICQ
По умолчанию

бля только что 2 голоса проиграл((
 
Ответить с цитированием

  #8  
Старый 18.03.2010, 23:40
ZnikiR
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме:
798217

Репутация: 44
Отправить сообщение для ZnikiR с помощью ICQ
По умолчанию

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

  #9  
Старый 18.03.2010, 23:41
ZnikiR
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме:
798217

Репутация: 44
Отправить сообщение для ZnikiR с помощью ICQ
По умолчанию

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

  #10  
Старый 18.03.2010, 23:46
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

хааааааааа ... ноу проблем
Код:
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;
}
может тебе лучче сразу програмку которая играет написать?

Последний раз редактировалось Delimiter; 19.03.2010 в 00:00..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Крестики нолики Encefalit Болталка 2 19.02.2009 14:58



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ