您的位置:首页 > 其它

骑士周游问题

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息