#include "stdafx.h"
#include <stdio.h>
#include <vector>
using namespace std;
const int N = 5;
int array[N][N];
struct Node
{
int i;
int j;
};
vector<Node> vv;
vector<Node>::iterator it;
void Init(int array[N][N],int n)
{
for(int i = 0 ; i < n ; ++i)
for(int j = 0 ; j < n ; ++j)
{
array[i][j] = 0;
}
}
int IsOver()
{
for(int i = 0 ; i < N ; ++i)
{
for(int j = 0 ; j < N ; ++j)
{
if(array[i][j] == 0)
return 0;
}
}
return 1;
}
void Print()
{
for(int i = 0 ; i < N ; ++i)
{
for(int j = 0 ; j < N ; ++j)
{
printf("%d ",array[i][j]);
}
printf("/n");
}
printf("---------------------------------/n");
}
int Place(int i,int j)
{
if(array[i][j] == 0)
return 1;
else
return 0;
}
void Switch(int r,int &i,int &j,int &flag)
{
switch(r)
{
case 0:
i = i-1;
j= j+2;
break;
case 1:
i = i-2;
j= j+1;
break;
case 2:
i = i-2;
j= j-1;
break;
case 3:
i = i-1;
j= j-2;
break;
case 4:
i = i+1;
j= j-2;
break;
case 5:
i = i+2;
j= j-1;
break;
case 6:
i = i+2;
j= j+1;
break;
case 7:
i = i+1;
j= j+2;
break;
}
if(i<0 ||j<0||i>=N||j>=N)
flag = 0;
}
void Zhouyou(int i,int j)
{
int tmpi = i,tmpj = j;
int flag =1;
if(IsOver())
{
printf("Success /n");
for(int i = 0 ; i < vv.size() ; ++i)
{
cout<<vv[i].i<<" "<<vv[i].j<<endl;
}
exit(0);
//printf("/n---------------------------------/n");
}
for(int r = 0 ; r < 8 ;++r)
{
flag =1;
tmpi = i;
tmpj = j;
Switch(r,tmpi,tmpj,flag);
if(!flag)
continue;
if(Place(tmpi,tmpj))
{
array[tmpi][tmpj] = 1;
Node node ;
node.i = tmpi;
node.j = tmpj;
vv.push_back(node);
Zhouyou(tmpi,tmpj);
array[tmpi][tmpj] = 0;
it = vv.end();
vv.erase(--it);
}
}
}
int main()
{
Init(array,N);
array[0][0] = 1;
Zhouyou(0,0);
return 0;
}