8x8x8 Satranç Kübüne Vezir

Elimizde 8x8x8 lik bir satranç kübü var. Bu tahtaya birbirini yemeyen maksimum kaç vezir yerleştirilir? (Vezirler derinlemesine de hareket edebilmektedir)
Bir yorum :
Bir cevap yazın
E-posta hesabınız yayımlanmayacak. Abonelik için e-posta yazmalısınız. Yorumda html etiketleri kullanabilirsiniz.
Gönderen: sonsuz --> 30 Nisan 2019 --> YazdırKategori: Bilişim, Zeka Soruları - Etiketler: küp, satranç, vezir
-
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define PRINT(vec) for(int i = 0; i < vec.size(); i++) cout << vec[i] << endl;
int board[8][8][8] = {0}, moves = 0;
template
string toString(T arg)
{
stringstream ss;
ss << arg;
return ss.str();
}
void Clear()
{
for(int x = 0; x < 8; x++)
{
for(int y = 0; y < 8; y++)
{
for(int z = 0; z < 8; z++)
board[x][y][z] = 0;
}
}
moves = 0;
}
void ClearScreen() {
COORD topLeft = { 0, 0 };
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(console, &screen);
FillConsoleOutputCharacterA(
console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
FillConsoleOutputAttribute(
console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
SetConsoleCursorPosition(console, topLeft);
}
void print()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
for(int x = 0; x < 8; x++)
{
for(int y = 0; y < 8; y++)
{
for(int z = 0; z < 8; z++)
{
if(board[x][y][z] == 2)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
if(board[x][y][z] == 1)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);
printf("%d", board[x][y][z]);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
printf(" ");
}
printf("\n");
}
printf("\n");
}
}
void write_to_file(string additional)
{
ofstream yaz("maksimum.txt");
for(int x = 0; x < 8; x++)
{
for(int y = 0; y < 8; y++)
{
for(int z = 0; z < 8; z++)
{
yaz << board[x][y][z];
}
yaz << endl;
}
yaz << endl;
}
yaz << endl << additional;
}
bool Place(int X, int Y, int Z)
{
swap(Y, X);
if(board[Z][X][Y] == 1 || board[Z][X][Y] == 2) return false;
board[Z][X][Y] = 2;
for(int x = 0; x < 8; x++)
{
if(x != Z && board[x][X][Y] != 2) board[x][X][Y] = 1;
if(x != X && board[Z][x][Y] != 2) board[Z][x][Y] = 1;
if(x != Y && board[Z][X][x] != 2) board[Z][X][x] = 1;
}
for(int i = X, j = Y; i < 8 && j = 0 && j < 8; i–, j++)
if(i != X && j != Y && board[Z][i][j] != 2) board[Z][i][j] = 1;
for(int i = X, j = Y; i = 0; i++, j–)
if(i != X && j != Y && board[Z][i][j] != 2) board[Z][i][j] = 1;
for(int i = X, j = Y; i >= 0 && j >= 0; i–, j–)
if(i != X && j != Y && board[Z][i][j] != 2) board[Z][i][j] = 1;
for(int i = X, j = Y, k = Z; i < 8 && j < 8 && k = 0 && j >= 0 && k < 8; i–, j–, k++)
if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
for(int i = X, j = Y, k = Z; i = 0 && k = 0 && j < 8 && k < 8; i–, j++, k++)
if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
for(int i = X, j = Y, k = Z; i < 8 && j = 0; i++, j++, k–)
if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
for(int i = X, j = Y, k = Z; i >= 0 && j >= 0 && k >= 0; i–, j–, k–)
if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
for(int i = X, j = Y, k = Z; i = 0 && k >= 0; i++, j–, k–)
if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
for(int i = X, j = Y, k = Z; i >= 0 && j = 0; i–, j++, k–)
if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
for(int x = X, k = Z; x < 8 && k < 8; x++, k++)
if(x != X && board[k][x][Y] != 2) board[k][x][Y] = 1;
for(int x = Y, k = Z; x < 8 && k = 0 && k = 0 && k < 8; x–, k++)
if(x != Y && board[k][X][x] != 2) board[k][X][x] = 1;
for(int x = X, k = Z; x = 0; x++, k–)
if(x != X && board[k][x][Y] != 2) board[k][x][Y] = 1;
for(int x = Y, k = Z; x = 0; x++, k–)
if(x != Y && board[k][X][x] != 2) board[k][X][x] = 1;
for(int x = X, k = Z; x >= 0 && k >= 0; x–, k–)
if(x != X && board[k][x][Y] != 2) board[k][x][Y] = 1;
for(int x = Y, k = Z; x >= 0 && k >= 0; x–, k–)
if(x != Y && board[k][X][x] != 2) board[k][X][x] = 1;
moves ++;
return true;
}
vector randomVec()
{
vector d = {0,1,2,3};
vector d2;
do
{
int r = rand()%d.size();
d2.push_back(d[r]);d.erase(d.begin() + r);
}while(d.size() > 0);
return d2;
}
bool Tara(int Z)
{
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 8; j++)
{
if(board[i][j][Z] == 0) return true;
}
}
return false;
}
int automatic()
{
Clear();
Place(0, 0, 0);
bool br = false;
vector nums = {0,1,2,3,4,5,6,7};
vector zCoords;
for(int i = 0; i < 4; i++)
{
int r = rand()%nums.size();
zCoords.push_back(nums.at(r)); nums.erase(nums.begin() + r);
}
for(int z : zCoords)
{
for(auto k : randomVec())
{
if(k == 0)if(Place(0, 0, z)) {z = 0; break;}
if(k == 1)if(Place(0, 7, z)) {z = 0; break;}
if(k == 2)if(Place(7, 7, z)) {z = 0; break;}
if(k == 3)if(Place(7, 0, z)) {z = 0; break;}
}
}
for(int z = 0; z < 8; z++)
{
br = false;
for(int i = 0; i < 8; i++)
{
for(auto k : randomVec())
{
if(k == 0)if(Place(0,i,z)) {z = 0;break; br = true;}
if(k == 1)if(Place(i,0,z)) {z = 0;break; br = true;}
if(k == 2)if(Place(7,i,z)) {z = 0;break; br = true;}
if(k == 3)if(Place(i,7,z)) {z = 0;break; br = true;}
}
if(br)break;
}
}
vector coords_x, coords_y;
vector avalibleZ = {0,1,2,3,4,5,6,7};
int randomZ = 0;
do
{
randomZ = 0;
coords_x.clear();
coords_y.clear();
int index_ = rand()%avalibleZ.size();
randomZ = avalibleZ.at(index_);
avalibleZ.erase(avalibleZ.begin() + index_);
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 8; j++)
{
if(board[randomZ][j][i] == 0)
{
coords_x.push_back(i);
coords_y.push_back(j);
}
}
}
int first_size = coords_x.size();
for(int k = 0; k < first_size; k++)
{
int index = rand()%coords_x.size();
int gX = coords_x.at(index);
int gY = coords_y.at(index);
Place(gX, gY, randomZ);
coords_x.erase(coords_x.begin() + index);
coords_y.erase(coords_y.begin() + index);
}
}while(!avalibleZ.empty());
return moves;
}
int main()
{
srand(time(NULL));
Clear();
string command;
while(true)
{
ClearScreen();
print();
getline(cin, command);
string word;
vector words;
istringstream iss(command);
while(iss >> word) words.push_back(word);
words.push_back(word);
for(int i = 0; i 1) maxK = atoi(words[1].c_str());
int max = 0;
for(int k = 0; k max) max = moves;
if(words.size() > 2 && words[2] == “write”)write_to_file(toString(max));
}
cout << "Maksimum: " << max << endl << endl;
system("pause");
}
else if(words[0] == "help")
{
cout << "Vezir Command: Vezir x(a-h) y(1-8) z(0-7)" << endl << "clear Command: clears the entire board" << endl << endl;
system("pause");
}
}
return 0;
}
/* Auto 1000 yazarsanız 1000 kere dener ve maksimim değeri size gösterir.*/