using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace RandomPlayer { class Program { private const int Size = 30; private int[,] field = new int[Size, Size]; // полезные функции private struct Pos { public int i, j; public Pos(int i, int j) { this.i = i; this.j = j; } } private Queue q=new Queue(); private const int Inf = 1000000; private int[,] dist = new int[Size, Size]; private void Wave(int i1, int j1, int i2, int j2) { if (i2 < 0 || i2 >= Size || j2 < 0 || j2 >= Size) return; if (dist[i2, j2] < Inf || field[i2, j2] != 0) return; dist[i2, j2] = dist[i1, j1] + 1; q.Enqueue(new Pos(i2, j2)); } private void CalcDist() // расстояние до яблок, результат в dist { int i, j; for (i = 0; i < Size; i++) { for (j = 0; j < Size; j++) { dist[i, j] = Inf; if (field[i, j] == 1000) { dist[i, j] = 0; q.Enqueue(new Pos(i, j)); } } } while (q.Count > 0) { Pos p = q.Dequeue(); Wave(p.i, p.j, p.i + 1, p.j); Wave(p.i, p.j, p.i - 1, p.j); Wave(p.i, p.j, p.i, p.j + 1); Wave(p.i, p.j, p.i, p.j - 1); } } private bool[,] used = new bool[Size, Size]; private int[,] area = new int[Size, Size]; private int Dfs(int i, int j) { if (i < 0 || i >= Size || j < 0 || j >= Size) return 0; if (field[i, j] != 0 && field[i, j] != 1000) return 0; if (used[i, j]) return 0; used[i, j] = true; q.Enqueue(new Pos(i, j)); int s = 1; s+=Dfs(i + 1, j); s+=Dfs(i - 1, j); s+=Dfs(i, j + 1); s+=Dfs(i, j - 1); return s; } private void CalcArea() // Размеры связных областей { int i, j; for (i = 0; i < Size; i++) { for (j = 0; j < Size; j++) { area[i, j] = 0; used[i, j] = false; } } for (i = 0; i < Size; i++) { for (j = 0; j < Size; j++) { if (area[i, j] == 0 && (field[i, j] == 0 || field[i, j] == 1000)) { int s = Dfs(i, j); while (q.Count > 0) { Pos p = q.Dequeue(); area[p.i, p.j] = s; } } } } } private string moves; private void CheckMove(int i, int j, string dir) { if (i < 0 || i >= Size || j < 0 || j >= Size) return; if (field[i, j] != 0 && field[i, j] != 1000) return; moves += dir; } public void Run() { Random rnd = new Random(); while (true) { int i, j, hi = 4, hj = 4; // загрузка текущего состояния for (i = 0; i < Size; i++) { string[] numbers; do { string s = Console.ReadLine(); numbers = s.Split(' '); } while (numbers.Length < Size); for (j = 0; j < Size; j++) { field[i, j] = Convert.ToInt32(numbers[j]); if (field[i, j] == 1) { hi = i; hj = j; } } } // здесь можно вызвать полезные функции // CalcDist(); // теперь dist[i,j] содержит расстояние от клетки i,j до ближайщего яблока // если клетка непроходима из-за стен и змеек, то dist[i,j]==Inf // CalcArea(); // теперь area[i,j] содержит размер связной области, включающей i,j // если клетка непроходима из-за стен и змеек, то area[i,j]==0 moves = ""; CheckMove(hi - 1, hj, "U"); CheckMove(hi + 1, hj, "D"); CheckMove(hi, hj-1, "L"); CheckMove(hi, hj+1, "R"); if (moves.Length == 0) moves = "LRDU"; Console.WriteLine(moves[rnd.Next(moves.Length)]); Console.WriteLine(); } } static void Main(string[] args) { new Program().Run(); } } }