Meydan okuma
Bir ızgara boyutu, engellerin pozisyonları, oyuncu pozisyonu ve hedef pozisyonu göz önüne alındığında, göreviniz oyuncunun hedefe ulaşması ve aynı anda engellerden kaçınması için bir yol bulmaktır (gerekirse).
Giriş
- N : Izgara boyutu
N x N
- P : Oyuncunun pozisyonu
[playerposx, playerposy]
- T : Hedefin konumu
[targetposx, targetposy]
- O : Engellerin konumları
[[x1, y1], [x2, y2],...,[xn, yn]]
Çıktı
Yol : Hedefe ulaşmak için kullanabileceği bir yol oyuncusu[[x1, y1], [x2, y2],...,[xn, yn]]
kurallar
- Nokta
[0,0]
, ızgaranın sol üst köşesinde bulunur. - Oyuncunun pozisyonu daima ızgaranın sol tarafında olacaktır.
- Hedefin konumu her zaman ızgaranın sağ tarafında olacaktır.
- Izgara her zaman en az bir engele sahip olacaktır.
- Hiçbir engelin oyuncuyla veya hedef pozisyonla örtüşmediğini varsayabilirsiniz.
- Min yolunu bulmanız gerekmez.
- Oynatıcı çapraz olarak değil sadece sola, sağa, yukarı ve aşağı hareket edebilir.
- Girişi istediğiniz herhangi bir şekilde alabilirsiniz.
- Oyuncunun hedefe ulaşması için bir yolun her zaman var olacağını varsayabilirsiniz.
- Açıkçası, her giriş için birden fazla geçerli yol vardır, birini seçin.
- Şebekenin
N > 2
en azından olacağını varsayalım3 x 3
.
Örnekler
Girdi: 9
, [6, 0]
, [3, 8]
, [[0, 5], [2, 2], [6, 4], [8, 2], [8, 7]]
Olası Çıktı:[[6, 0], [6, 1], [6, 2], [6, 3], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [4, 8], [3, 8]]
Girdi: 6
, [1, 0]
, [3, 5]
, [[1, 2], [2, 5], [5, 1]]
Olası Çıktı:[[1, 0], [1, 1], [2, 1], [2, 2], [2, 3], [2, 4], [3, 4], [3, 5]]
Not
Bunun X
satırlar ve Y
sütunlar için olduğunu unutmayın. Onları bir görüntüdeki koordinatlarla karıştırmayın.
Düzenle
As @digEmAll nedeniyle kurallarına, işaret #2
ve #3
, playerY = 0
ve targetY = N-1
. Yani, isterseniz sadece girdi olarak alabilir playerX
ve targetX
(eğer kodunuzu kısaltırsa).