I、題し
惑星Xは、丘の中腹の遊び場上に構築された迷路です。
これは、その相互接続された10×10の小さな部屋です。私は部屋の床の上に手紙をたくさん読んで。
私たちは、その後、プレイヤーが上り坂地位に向かう方向であることを前提としています
Lは部屋の左側が行き表し、
Rは右側の部屋に行き表し、
Uは部屋が上り坂方向に行ってきました表し、
Dは、部屋が下り坂の方向を行ってきました表します。少し怠惰な住民X惑星は、私が面倒だと思うしたくありません。
彼らは運のようなゲームをプレイすることを好みます。このゲームは、あまりにも!当初、100人の選手が小さな部屋にヘリコプターを置きます。
プレイヤーは、アルファベット地に移動する必要があります。迷路マップを次のように
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------あなたは数学を行い、最終的に、どのように多くの選手が迷路?外となりますしてください
円の内側ではなく。余分な内容を記入していない、迷路の外の選手の数を表す整数を提出してください。
あなたがゲームのルールを理解していない場合は、簡略図解説4x4の迷路を見ることができます:
第二に、アイデア
ここでは、直接に戻って場所を確認するために、それぞれの場所を列挙することができます。
限り境界としてさらに迷路、1の数のうちマトリックスより。
第三に、問題解決
#include <iostream> using namespace std; int ans=0; int visit[11][11]; char maze[11][11]={"UDDLUULRUL","UURLLLRRRU","RRUURLDLRD","RUDDDDUUUU","URUDLLRRUU", "DURLRLDLRL","ULLURLLRDU","RDLULLRDDD","UUDDUDUDLL","ULRDLUURRR"}; int f(int x,int y) { while(1) { if(x<0 || y<0 || x>9 || y>9) //走出迷宫的条件。 { ans++; break; } if(visit[x][y]) //路径已经浏览过了 { break; } //开始浏览新的路径。 visit[x][y]=1; switch (maze[x][y]) { case 'U':x--;break; case 'D':x++;break; case 'L':y--;break; case 'R':y++;break; } } } int main() { for (int i=0;i<10;i++) { for (int j=0;j<10;j++) { memset(visit,0, sizeof(visit)); f(i,j); } } cout << ans << endl; return 0; }
第四に、結果
31
プロセスは、終了コードを終了0