미완성입니다..중괄호 관리도 안된것 같고, 각 변수의 값 조정 변화에 오류가 있는 것 같다.
~cpp
#include <iostream>
using namespace std;
void main()
{
int board[8][8];
int firstBoard[8][8];
int y2nd, x2nd, setx = 0;
int y3rd, same = 0;
int impossible = 0;
int y4th, x4th;
int y5th, x5th;
int y6th, x6th;
int y7th, x7th;
int findY, findX;
int originX, firstFind,firstAnswer = 1;
int endFind = 0, count = 0;
for(int y1st = 0 ; y1st < 8 ; y1st++)
{
for(int x1st = 0 ; x1st < 8 ; x1st++)
{
board[x1st][y1st] = 0;
firstBoard[x1st][y1st] = 0;
}
}
do //맨 처음답과 같을때까지 찾기 반복
{
impossible = 0;
for(y2nd = 0 ; y2nd < 8 ; y2nd++) //행단위
{
setx = 0;
firstFind = 1;
do //열바꿔가며 가능한 자리 찾기
{
same = 0;
x2nd = setx;
if(firstFind == 1)
{
originX = x2nd;
firstFind = 0;
}
board[y2nd][x2nd] = 1;
for(y3rd = 0 ; y3rd < 8 ; y3rd) //같은 열에 있는지 찾기 //수직검색
{
if (board[y3rd][x2nd] == board[y2nd][x2nd]) same = 1;
}
if (same == 0) //왼쪽위 대각선 검색
{
findY = y2nd - 1;
findX = x2nd - 1;
while( (findY != -1) && (findX != -1))
{
if(board[findY][findX] == 1) same = 1;
findY -= 1;
findX -= 1;
}
}
if (same == 0) //왼쪽아래 대각선 검색
{
findY = y2nd + 1;
findX = x2nd - 1;
while( (findY != 8) && (findX != -1))
{
if(board[findY][findX] == 1) same = 1;
findY += 1;
findX -= 1;
}
}
if (same == 0) //오른쪽위 대각선 검색
{
findY = y2nd - 1;
findX = x2nd + 1;
while( (findY != -1) && (findX != 8))
{
if(board[findY][findX] == 1) same = 1;
findY -= 1;
findX += 1;
}
}
if (same == 0) //오른쪽아래 대각선 검색
{
findY = y2nd + 1;
findX = x2nd + 1;
while( (findY != 8) && (findX != 8))
{
if(board[findY][findX] == 1) same = 1;
findY += 1;
findX += 1;
}
}
if (same == 1) //공격가능한 것이 있으면 초기화후 열바꾸기
{
board[y2nd][x2nd] = 0;
setx++;
}
if (setx == 8) setx = 0;
if (originX == setx ) impossible = 1; //모든열이 불가능하면 나오기
if (impossible == 1) break;
} while (same == 1);
if (impossible == 1) break;
}
if (firstAnswer == 0) //처음 답과 같은지 조사
{
for(y7th = 0 ; y7th < 8 ; y7th++)
{
for(x7th = 0 ; x7th < 8 ; x7th++)
{
if( firstBoard[y7th][x7th] != board[y7th][x7th]) count++;
}
}
}
if (count == 0) endFind = 1; //종료조건
else count = 0;
if (impossible == 0)
{
if (firstAnswer == 1) //처음답 저장
{
for(y6th = 0 ; y6th < 8 ; y6th++)
{
for(x6th = 0 ; x6th < 8 ; x6th++)
{
firstBoard[y6th][x6th] = board[y6th][x6th];
}
}
firstAnswer = 0;
}
}
if(endFind == 0)
{
if (impossible == 0)
{
for(y4th = 0 ; y4th < 8 ; y4th++) //답 출력
{
for(x4th = 0 ; x4th < 8 ; x4th++)
{
cout<<"board[y3th][x4th]\t";
}
cout<<endl;
}
cout<<endl<<endl;
}
for(y5th = 0 ; y5th < 8 ; y5th++) //초기화
{
for(x5th = 0 ; x5th < 8 ; x5th++)
{
board[x5th][y5th] = 0;
}
}
}
}while(endFind == 0);
}