骑士周游问题
2007-10-24 13:37
351 查看
#include "stdafx.h"
#include <stdio.h>
#include <vector>
using namespace std;
const int N = 5;
int array
;
struct Node
{
int i;
int j;
};
vector<Node> vv;
vector<Node>::iterator it;
void Init(int array
,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;
}
#include <stdio.h>
#include <vector>
using namespace std;
const int N = 5;
int array
;
struct Node
{
int i;
int j;
};
vector<Node> vv;
vector<Node>::iterator it;
void Init(int array
,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;
}
相关文章推荐
- 马踏棋盘算法 [骑士周游问题] --->图
- 马踏棋盘算法(骑士周游问题)
- 再探跳马问题(骑士周游问题)
- 转:数据结构与算法1:马踏棋盘问题(骑士周游问题)
- 【DS】骑士周游问题
- HDU 1372(骑士周游问题)
- POJ 2488 A Knight's Journey(DFS——骑士周游问题)
- poj_2488_A Knight's Journey_骑士周游问题
- 数据结构与算法10:马踏棋盘问题(骑士周游问题)
- 小甲鱼数据结构和算法--马踏棋盘(骑士周游问题)
- 马踏棋盘问题(骑士周游问题)及其优化算法java实现
- 马踏棋盘算法(骑士周游问题)
- 马踏棋盘算法(骑士周游问题)
- 图论 --- 骑士周游问题,DFS
- 马踏棋盘算法(骑士周游问题)- 数据结构和算法60
- 跳马问题(骑士周游问题)初探
- 再探跳马问题(骑士周游问题)
- 骑士周游问题(马踏棋盘问题)DFS
- scau实验题 8600 骑士周游问题(有障碍物)
- 马踏棋盘算法(骑士周游问题)- 数据结构和算法60