藍橋杯 歷屆試題 蘭頓螞蟻python dfs

2021-10-07 08:08:42 字數 2927 閱讀 2563

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

蘭頓螞蟻,是於2023年,由克里斯·蘭頓提出來的,屬於細胞自動機的一種。

平面上的正方形格仔被填上黑色或白色。在其中一格正方形內有乙隻「螞蟻」。

螞蟻的頭部朝向為:上下左右其中一方。

螞蟻的移動規則十分簡單:

若螞蟻在黑格,右轉90度,將該格改為白格,並向前移一格;

若螞蟻在白格,左轉90度,將該格改為黑格,並向前移一格。

規則雖然簡單,螞蟻的行為卻十分複雜。剛剛開始時留下的路線都會有接近對稱,像是會重複,但不論起始狀態如何,螞蟻經過漫長的混亂活動後,會開闢出一條規則的「高速公路」。

螞蟻的路線是很難事先**的。

你的任務是根據初始狀態,用計算機模擬蘭頓螞蟻在第n步行走後所處的位置。

輸入格式

輸入資料的第一行是 m n 兩個整數(3 < m, n < 100),表示正方形格仔的行數和列數。

接下來是 m 行資料。

每行資料為 n 個被空格分開的數字。0 表示白格,1 表示黑格。

接下來是一行資料:x y s k, 其中x y為整數,表示螞蟻所在行號和列號(行號從上到下增長,列號從左到右增長,都是從0開始編號)。s 是乙個大寫字母,表示螞蟻頭的朝向,我們約定:上下左右分別用:udlr表示。k 表示螞蟻走的步數。

輸出格式

輸出資料為兩個空格分開的整數 p q, 分別表示螞蟻在k步後,所處格仔的行號和列號。

樣例輸入

5 60 0 0 0 0 0

0 0 0 0 0 0

0 0 1 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

2 3 l 5

樣例輸出

1 3樣例輸入

3 30 0 0

1 1 1

1 1 1

1 1 u 6

樣例輸出

0 0分析

搞清楚每個情況該往**走,乙個簡單的dfs就可以解決,值得注意的是,dfs找到一條路徑之後就要跳出迴圈,不然會接著回溯。

m, n =

map(

int,

input()

.split())

s =[

]for i in

range

(m):

list

(map

(int

,input()

.split())

))a =list

(input()

.split())

x =int

(a[0])

y =int

(a[1])

d =str

(a[2])

step =

int(a[3]

)flag =

0def

dfs(i, j, d, num)

:global flag

if flag ==1:

return

if num == step:

flag =

1# 避免回溯

print

(i, j)

return

if s[i]

[j]==

1and d ==

"u":

d ="r" s[i]

[j]=

0 dfs(i, j +

1, d, num +1)

if s[i]

[j]==

1and d ==

"d":

d ="l" s[i]

[j]=

0 dfs(i, j -

1, d, num +1)

if s[i]

[j]==

1and d ==

"r":

d ="d" s[i]

[j]=

0 dfs(i +

1, j, d, num +1)

if s[i]

[j]==

1and d ==

"l":

d ="u" s[i]

[j]=

0 dfs(i -

1, j, d, num +1)

if s[i]

[j]==

0and d ==

"u":

d ="l" s[i]

[j]=

1 dfs(i, j -

1, d, num +1)

if s[i]

[j]==

0and d ==

"d":

d ="r" s[i]

[j]=

1 dfs(i, j +

1, d, num +1)

if s[i]

[j]==

0and d ==

"r":

d ="u" s[i]

[j]=

1 dfs(i -

1, j, d, num +1)

if s[i]

[j]==

0and d ==

"l":

d ="d" s[i]

[j]=

1 dfs(i +

1, j, d, num +1)

dfs(x, y, d,

0)

不當之處歡迎指點

藍橋杯 歷屆試題 蘭頓螞蟻

歷屆試題 蘭頓螞蟻 時間限制 1.0s 記憶體限制 256.0mb 問題描述 蘭頓螞蟻,是於1986年,由克里斯 蘭頓提出來的,屬於細胞自動機的一種。平面上的正方形格仔被填上黑色或白色。在其中一格正方形內有乙隻 螞蟻 螞蟻的頭部朝向為 上下左右其中一方。螞蟻的移動規則十分簡單 若螞蟻在黑格,右轉90...

藍橋杯 歷屆試題 蘭頓螞蟻

問題描述 蘭頓螞蟻,是於1986年,由克里斯 蘭頓提出來的,屬於細胞自動機的一種。平面上的正方形格仔被填上黑色或白色。在其中一格正方形內有乙隻 螞蟻 螞蟻的頭部朝向為 上下左右其中一方。螞蟻的移動規則十分簡單 若螞蟻在黑格,右轉90度,將該格改為白格,並向前移一格 若螞蟻在白格,左轉90度,將該格改...

藍橋杯 歷屆試題 蘭頓螞蟻 模擬

歷屆試題 蘭頓螞蟻 時間限制 1.0s 記憶體限制 256.0mb 問題描述 蘭頓螞蟻,是於1986年,由克里斯 蘭頓提出來的,屬於細胞自動機的一種。平面上的正方形格仔被填上黑色或白色。在其中一格正方形內有乙隻 螞蟻 螞蟻的頭部朝向為 上下左右其中一方。螞蟻的移動規則十分簡單 若螞蟻在黑格,右轉90...