Эта задача основана на Flow Free. Онлайн-версию можно найти здесь: http://www.moh97.us/
Вам дадут головоломку, и вы должны вернуться, 1
если головоломка разрешима или 0
если нет.
Чтобы решить головоломку, игрок должен создать путь, соединяющий каждую пару чисел, используя каждый пустой квадрат ровно один раз.
Вы передаете размеры квадрата, а затем x, y, c (где c - число, представляющее цвет) каждой точки. Например:
Если бы он 5,5
0,0,0
3,0,1
1,1,2
1,2,2
4,2,1
4,4,0
был передан вам, он бы представлял:
0..1.
.2...
.2..1
....0
И должен вернуть 1.
Вот еще несколько тестовых задач:
5,2
2,0,1
0,1,2
4,1,2
представляет:
..1..
2...2
и не разрешима, потому что есть только 1 1
.
4,2
0,0,0
3,0,0
0,1,0
3,1,0
представляет:
0..0
0..0
и не разрешима, потому что включает в себя более 2 0
с.
8,6
0,0,1
7,5,1
представляет:
1.......
........
........
........
........
.......1
и не решаемо (так как вы не можете использовать каждый квадрат).
2,5
0,0,1
2,0,6
4,0,6
0,1,4
3,1,4
4,1,1
представляет:
1.6.6
4..41
и не разрешим, потому что вы не можете подключить 1.
6,3
1,0,4
5,0,1
0,1,4
1,1,3
5,1,3
0,2,2
3,2,2
5,2,1
представляет:
.4...1
43...3
2..2.1
и не разрешима, потому что вы не можете соединить 1 (или 3), так как два пути обязательно должны пересекаться.
5,2
0,0,1
3,0,1
0,1,3
4,1,1
представляет:
1..1.
3...3
и не разрешима, потому что вы не можете использовать все квадраты при построении пути.
2,2
0,0,0
1,1,0
представляет:
1.
.1
и не разрешим, потому что вы не можете использовать все квадраты здесь
Вот еще несколько тестов:
5,5
0,3,0
0,4,1
1,2,2
1,3,1
2,0,0
3,0,4
3,1,2
3,3,5
3,4,4
4,4,5
должен вернуть 1
13,13
1,1,0
9,1,1
10,1,2
11,1,3
1,2,4
2,2,5
5,2,6
7,2,7
3,3,0
5,4,6
6,4,1
9,6,3
4,7,8
5,8,9
12,8,8
11,9,10
2,10,4
4,10,2
9,10,5
11,10,7
1,11,9
12,12,10
должен вернуть 1
7,7
0,0,0
0,1,1
1,1,2
2,1,3
4,2,4
0,3,1
5,3,3
0,4,4
2,4,5
5,4,2
0,5,0
1,5,5
3,5,6
3,7,6
должен вернуть 0
Это код гольф, и применяются стандартные правила.
1
если какая-либо из них посещает все ячейки и соединяет все терминалы. Очевидно, что этот подход не будет завершен за разумное количество времени ни для чего, кроме самого маленькогоN
(количество пустых ячеек), но у нас все еще есть математическая гарантия того, что алгоритм в конечном итоге вернет правильное значение.