zoukankan      html  css  js  c++  java
  • sicily Knight Moves

    这道读懂题意就很简单了,就宽搜就OK了。。

    题意其实就是在一个8*8的国际象棋棋盘上下棋,骑士以马的形式跳(“日”字型,跟中国象棋一样,没拌点)
      1 #include<iostream>
      2 #include<string>
      3 #include<queue>
      4 #include<memory.h>
      5 using namespace std;
      6 
      7 struct node
      8 {
      9 int row;
     10 int colum;
     11 int m;
     12 };
     13 int main()
     14 {
     15 int t;
     16 cin>>t;
     17 while(t--)
     18 {
     19 string a,b;
     20 cin>>a>>b;
     21 int colum1,row1,colum2,row2;
     22 colum1=a[0]-'a'+1;
     23 row1=a[1]-'0';
     24 colum2=b[0]-'a'+1;
     25 row2=b[1]-'0';
     26 bool visit[9][9];
     27 queue<node> q;
     28 node prime,over;
     29 prime.row=row1;
     30 prime.colum=colum1;
     31 prime.m=0;
     32 over.row=row2;
     33 over.colum=colum2;
     34 over.m=0;
     35 q.push(prime);
     36 memset(visit,false,sizeof(visit));
     37 visit[row1][colum1]=1;
     38 while(!q.empty())
     39 {
     40 node now=q.front();
     41 if(now.row==over.row&&now.colum==over.colum)
     42 {
     43 over.m=now.m; 
     44 break;
     45 } 
     46 else
     47 {
     48 node w;
     49 int i,j;
     50 i=now.row-2;
     51 j=now.colum+1;
     52 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
     53 {
     54 w.row=i;
     55 w.colum=j;
     56 w.m=now.m+1;
     57 visit[i][j]=1;
     58 q.push(w);
     59 }
     60 i=now.row-1;
     61 j=now.colum+2;
     62 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
     63 {
     64 w.row=i;
     65 w.colum=j;
     66 w.m=now.m+1;
     67 visit[i][j]=1;
     68 q.push(w);
     69 }
     70 i=now.row+1;
     71 j=now.colum+2;
     72 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
     73 {
     74 w.row=i;
     75 w.colum=j;
     76 w.m=now.m+1;
     77 visit[i][j]=1;
     78 q.push(w);
     79 }
     80 i=now.row+2;
     81 j=now.colum+1;
     82 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
     83 {
     84 w.row=i;
     85 w.colum=j;
     86 w.m=now.m+1;
     87 visit[i][j]=1;
     88 q.push(w);
     89 }
     90 i=now.row+2;
     91 j=now.colum-1;
     92 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
     93 {
     94 w.row=i;
     95 w.colum=j;
     96 w.m=now.m+1;
     97 visit[i][j]=1;
     98 q.push(w);
     99 }
    100 i=now.row+1;
    101 j=now.colum-2;
    102 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
    103 {
    104 w.row=i;
    105 w.colum=j;
    106 w.m=now.m+1;
    107 visit[i][j]=1;
    108 q.push(w);
    109 }
    110 i=now.row-1;
    111 j=now.colum-2;
    112 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
    113 {
    114 w.row=i;
    115 w.colum=j;
    116 w.m=now.m+1;
    117 visit[i][j]=1;
    118 q.push(w);
    119 }
    120 i=now.row-2;
    121 j=now.colum-1;
    122 if(visit[i][j]==0&&i>=1&&i<=8&&j>=1&&j<=8)
    123 {
    124 w.row=i;
    125 w.colum=j;
    126 w.m=now.m+1;
    127 visit[i][j]=1;
    128 q.push(w);
    129 }
    130 }
    131 q.pop();
    132 }
    133 cout<<"To get from "<<a<<" to "<<b<<" takes "<<over.m<<" knight moves."<<endl;
    134 }
    135 //system("pause");
    136 } 
  • 相关阅读:
    Linux驱动下的platform总线架构(转)
    一生中很值得看的30个故事之一断箭
    学习嵌入式LINUX系统的笔记和体会
    DIY:自己动手做一个迷你 Linux 系统
    linux里面i386 i686 i486 i586代表什么?是什么意思
    菜鸟编译Linux内核
    LINUX核心重编与升级
    ARM 内核移植中常见的错误
    Linux 2.6.19.x 内核编译配置选项简介
    基于S3C2410平台移植Linux 2.6内核指南
  • 原文地址:https://www.cnblogs.com/cfhome/p/2693109.html
Copyright © 2011-2022 走看看