В общем тупо задался целью,написать прогу. Но что-то никак не могу придумать алгоритм. В общем идея такая. Написать программу,которая просчитает и отобразить пошагово всё возможные ходы игры крестики-нолики 3х3. Меня инттересуют именно всё варианты ходов. Но вот уже 4 день ничего в голосу не идет.
ходов может быть 9х9=81 вариант ходов если не ошибаюсь . вот и пиши алгоритм. если крестик в ячке 1 то нолик ставлю ы ячейку 2
ошибаешься. начать, думаю с того, что в игре существуют два вида пермутаций: 1) 5 крестиков и 4 нолика 2) 4 крестика и 5 ноликов
Нет это просто зависит от того кто первый ходит. У меня тут мысли,просто есть 3 варианта первого хода,всё остальные ему идентичны. Представим матрицу 3х3 Значит первый ход может быть 1х1 2х2 или 1х2,остальное это всё одно и тоже. Вот я и думаю.Как отсекать похожие комбинации.
вызвать функцию все варианты естественно включают и одинаковые ..... варианты хода считаются разными на том основании что ходы делаются в разное время (что в теории игр не означает эквивалентными вариантами) Code: 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 .... это заваулированное условие твоей задачи ...
Да именно из-за приложения http://vkontakte.ru/app1741517 этим занялся. В обычном варианте выиграть вообще не вариант,вот и решил посмотреть возможные варианты.
хааааааааа ... ноу проблем Code: 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; } может тебе лучче сразу програмку которая играет написать?
анализируй после каждого хода а не ЛИНИЯ ли.... и возвращай если противник -100 если ты 100.... на каждом уровне действует МИНИМАКСНАЯ модель (каждый выбирает лучший для себя ход!)
Понял,но не всё. Надо всё пропустить через себя,не такой я быстрый и опытный. Но понял что ты хочешь,попробую сам переделать. Результат позже выложу
Там несколько вариантов игры,есть на проигрыш и на ничью.Хочу посмотреть реально ли при игре в эти режимы выиграть!