|
发表于 2016-8-24 20:51:57
|
显示全部楼层
#include<stdio.h>
#include<iostream>
#define N 8
typedef struct _pos_flag
{
int xpo;
int ypo;
}Pos;
static char code[N + 2][N + 2];
static Pos pos[] = { { -1, -1 }, { -1, 0 }, { -1, 1 } };
static int count = 0;
void init()
{
int i = 0;
int j = 0;
for (i = 0; i < N + 2; i++)
{
code[0][i] = '#';
code[N + 1][i] = '#';
code[i][0] = '#';
code[i][N + 1] = '#';
}
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
code[i][j] = ' ';
}
}
void display()
{
int i = 0;
int j = 0;
for (i = 0; i <N + 2; i++)
{
for (j = 0; j < N + 2; j++)
printf("%c", code[i][j]);
printf("\n");
}
}
int check(int i, int j)
{
int ret = 1;
int p= 0;
for (p = 0; p < 3; p++)
{
int ni = i;
int nj = j;
while (ret&&code[ni][nj] != '#')
{
ni = ni + pos[p].xpo;
nj = nj + pos[p].ypo;
ret = ret&&code[ni][nj] != '*';
}
}
return ret;
}
void find(int i)
{
int j = 0;
if (i > N)
{
count++;
printf("Solution: %d\n", count);
display();
getchar();
}
else
{
for (j = 1; j <= N; j++)
{
if (check(i, j))
{
code[i][j] = '*';
find(i + 1);
code[i][j] = ' ';
}
}
}
}
int main()
{
init();
//display();
find(1);
system("pause");
return 0;
} |
|