Hola, seriea algo asi pero no es 25 en raya sino 5, pero queda en un ciclo infinito!
Código PHP:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream>
using namespace std;
#define GRANDE 100;
#define MAX 1
#define MIN 2
#define NADIE '-'
#define JUGADOR 'O'
#define COMPUTADOR 'X'
//---------------------------------------------------------------------------
#pragma argsused
void impTablero(void);
int bt(int);
int eval(void);
char t[][5]={
{NADIE,NADIE,NADIE,NADIE,NADIE},
{NADIE,NADIE,NADIE,NADIE,NADIE},
{NADIE,NADIE,NADIE,NADIE,NADIE},
{NADIE,NADIE,NADIE,NADIE,NADIE},
{NADIE,NADIE,NADIE,NADIE,NADIE}
};
int mejorFila,mejorCol;
int profundida;
int main(int argc, char* argv[]){
int f,c,ganador;
mejorFila=0;
mejorCol=0;
profundida=0;
impTablero();
do{
do{
cout << "Su Turno:" << endl;
cout << "Fila? "; cin >> f;
cout << "Columna? "; cin >> c;
}while((f<0||f>=5 || c<0 || c>=5)||t[f][c]!=NADIE);
t[f][c]=JUGADOR;
impTablero();
bt(MAX);
cout << "Computador:" << endl;
cout << "Fila: " << mejorFila << endl;
cout << "Columna: " << mejorCol << endl;
t[mejorFila][mejorCol]=COMPUTADOR;
impTablero();
ganador=eval();
profundida=0;
}while(ganador==2);
if(ganador==-1) cout << "***Ud. Gana***";
else if(ganador==1) cout << "***Computador gana***";
else cout << "***Empate!***";
cout << endl;
system("pause");
return 0;
}
int bt(int modo){
int i,j,val,mfLocal=0,mcLocal=0;
int valor=eval();
if(valor!=2){
return valor;
}
if(modo==MAX){
valor=-GRANDE;
}else{
valor=GRANDE;
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(t[i][j]==NADIE){
if(modo==MAX){
t[i][j]=COMPUTADOR;
val=bt(MIN);
if(valor<val){
valor=val;
mfLocal=i;
mcLocal=j;
}
}else{
t[i][j]=JUGADOR;
val=bt(MAX);
if(valor>val){
valor=val;
mfLocal=i;
mcLocal=j;
}
}
t[i][j]=NADIE;
}
}
}
mejorFila=mfLocal;
mejorCol=mcLocal;
return valor;
}
int eval(void){
profundida++;
int i,j,ganador=NADIE;
for(i=0;i<5;i++)
if(t[i][0]!=NADIE && t[i][0]==t[i][1] && t[i][1]==t[i][2] && t[i][2]==t[i][3] && t[i][3]==t[i][4])
ganador=t[i][0];
for(j=0;j<5;j++)
if(t[0][j]!=NADIE && t[0][j]==t[1][j] && t[1][j]==t[2][j] && t[2][j]==t[3][j] && t[3][j]==t[4][j])
ganador=t[0][j];
if(t[0][0]!=NADIE && t[0][0]==t[1][1] && t[1][1]==t[2][2] && t[2][2]==t[3][3] && t[3][3]==t[4][4])
ganador=t[0][0];
if(t[0][4]!=NADIE && t[0][4]==t[1][3] && t[1][3]==t[2][2] && t[2][2]==t[3][1] && t[3][1]==t[4][0])
ganador=t[0][4];
if(ganador==JUGADOR)
return -1;
if(ganador==COMPUTADOR)
return 1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(t[i][j]==NADIE)
return 2;
return 0;
}
void impTablero(void){
int i,j;
cout << endl;
for(i=0;i<5;i++){
for(j=0;j<5;j++)
cout << t[i][j];
cout << endl;
}
cout << endl;
}