1. 程式人生 > >洛谷 P1518 兩只塔姆沃斯牛

洛谷 P1518 兩只塔姆沃斯牛

題目 給定 時間 順時針 左右 tex ++ 代碼 障礙

P1518 兩只塔姆沃斯牛 The Tamworth Two

簡單的模擬題,代碼量不大。

他們走的路線取決於障礙物,可以把邊界也看成障礙物,遇到就轉,枚舉次,因為100 * 100 * 4,只有4個可能在一個格子裏面走,上下左右,按照給定的方式枚舉,如果相遇就輸出,沒有就輸出不可相遇。

(1) 邊界看成障礙物,都變成 * 號就好了。

(2) 然後定義兩個表示方向的數組

int dx[5]={-1,0,1,0};
int dy[5]={0,1,0,-1};

分別代表上右下左(順時針)

(3) 立兩個flag:flag_F表示F現在的方向,flag_C同理。

(4) 找出F和C的初始位置。

(5) 然後開始枚舉每一分鐘的情況,要看清楚題目裏說明了轉彎需要花費時間,循環枚舉。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int dx[5]={-1,0,1,0};
int dy[5]={0,1,0,-1};
char map[22][22];
int cx,cy,fx,fy,flag_C,flag_F;
int main()
{
    flag_C=flag_F=0
; for(int i=0;i<=11;i++) //邊界直接定義為障礙 map[0][i]=*,map[i][0]=*,map[11][i]=*,map[i][11]=*; for(int i=1;i<=10;i++) //輸入 for(int j=1;j<=10;j++) cin>>map[i][j]; for(int i=1;i<=10;i++) //查找 F和 C的位置。 { for(int
j=1;j<=10;j++) { if(map[i][j]==C)cx=i,cy=j,map[i][j]=.; if(map[i][j]==F)fx=i,fy=j,map[i][j]=.; } } for(int i=1;i<=400000;i++) //循環枚舉 { if(map[cx+dx[flag_C]][cy+dy[flag_C]]!=*) cx=cx+dx[flag_C],cy=cy+dy[flag_C]; else flag_C++,flag_C%=4; if(map[fx+dx[flag_F]][fy+dy[flag_F]]!=*) fx=fx+dx[flag_F],fy=fy+dy[flag_F]; else flag_F++,flag_F%=4; if(fx==cx&&fy==cy) { printf("%d",i); return 0; } // cout<<"F:"<<fx<<" "<<fy<<" and "<<"C:"<<cx<<" "<<cy<<"\n"; } printf("0") }

洛谷 P1518 兩只塔姆沃斯牛