zoukankan      html  css  js  c++  java
  • The Tamworth Two chapter 2.4

    思路比较清楚,模拟+判断重复,定义好表示方式用位运算判重。

    如何判重即是判断是否能相遇,记录每分钟时人和牛所在位置与行走方向,如果到某分钟时发现当前位置和方向已被记录过,则说明陷入循环

    及永不会再相遇

      1 /*
      2 
      3 ID: hubiao cave
      4 
      5 PROG: ttwo
      6 
      7 LANG: C++
      8 
      9 */
     10 
     11 
     12 
     13 
     14 #include<iostream>
     15 
     16 #include<fstream>
     17 
     18 #include<string>
     19 
     20 using namespace std;
     21 
     22 
     23 int field[12][12];
     24 int record[120][120];
     25 int cs,ms;
     26 int cd=4,md=4;
     27 bool work();
     28 void cmwork(int&,int&);
     29 int minute;
     30 
     31 int main()
     32 
     33 {
     34 
     35     ifstream fin("ttwo.in");
     36 
     37     ofstream fout("ttwo.out");
     38     string str;
     39     for(int i=0;i<=9;++i)
     40     {
     41         fin>>str;
     42         for(int j=0;j<=9;++j)
     43         {
     44             if(str[j]=='*')
     45                 field[i][j]=16;
     46             else if (str[j]=='F')
     47             {
     48                 ms=10*i+j;
     49             }
     50             else if (str[j]=='C')
     51             {
     52                 cs=10*i+j;
     53             }
     54             else
     55                 ;
     56         }
     57 
     58         record[cs][ms]=(1<<(cd+3))+(1<<(md-1));
     59 
     60 
     61     }
     62 
     63     if(work())
     64             fout<<minute<<endl;
     65         else
     66             fout<<0<<endl;
     67     return 0;
     68 
     69 
     70 }
     71 
     72 bool work()
     73 {
     74     do
     75     {
     76         cmwork(cs,cd);
     77         cmwork(ms,md);
     78         ++minute;
     79         if(cs==ms)
     80             return true;
     81         else
     82         {
     83             if(record[cs][ms]&(1<<(3+cd))&&record[cs][ms]&(1<<(md-1)))
     84                 return false;
     85             else
     86                 record[cs][ms]+=1<<(3+cd)&&1<<(md-1);
     87         }
     88     }while(1);
     89 }
     90 
     91 void cmwork(int& xs,int&xd)
     92 {
     93     switch(xd)
     94     {
     95         case 1:
     96             if(xs%10==0||field[xs/10][xs%10-1]==16)
     97         {
     98             --xd;
     99             if(!xd)
    100                 xd=4;    
    101         }
    102         else
    103         {
    104             xs=xs-1;
    105         }
    106             break;
    107         case 2:
    108             if(xs/10==9||field[xs/10+1][xs%10]==16)
    109         {
    110             --xd;
    111             if(!xd)
    112                 xd=4;    
    113         }
    114         else
    115         {
    116             xs=xs+10;
    117         }
    118             break;
    119         case 3:
    120           if(xs%10==9||field[xs/10][xs%10+1]==16)
    121         {
    122             --xd;
    123             if(!xd)
    124                 xd=4;    
    125         }
    126         else
    127         {
    128             xs=xs+1;
    129         }
    130 
    131             break;
    132         case 4:
    133         if(xs/10==0||field[xs/10-1][xs%10]==16)
    134         {
    135             --xd;
    136             if(!xd)
    137                 xd=4;    
    138         }
    139         else
    140         {
    141             xs=xs-10;
    142         }
    143         
    144             break;
    145     }
    146 }
  • 相关阅读:
    梯度下降法以及实现
    常见的端口号及其用途
    vue build报copy-webpack-plugin] unable to locate异常的解决方法
    vue build错误异常的解决方法
    Websocket-Sharp获取客户端IP地址和端口号
    理解SignalR
    城市经纬度 json
    FFmpeg部署及相关指令操作说明
    C#中Skip和Take的用法
    SQL Server 2008R2 :远程调用失败 的解决方法(全部方法)
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3316204.html
Copyright © 2011-2022 走看看