from src.game.game import Game
# Load puzzle từ file
game = Game.from_file("input/easy_1.txt")
# Giải với thuật toán Backtracking
success = game.solve(solver_name="backtracking")
# Hiển thị kết quả
if success:
stats = game.get_stats()
print(f"Solved in {stats['time']:.4f}s")
print(f"Nodes: {stats['nodes']}, Edges: {stats['edges']}")
game.puzzle.print()
else:
print("No solution found")
Các thuật toán có sẵn
from src.game.game import Game
game = Game.from_file("input/easy_1.txt")
# Backtracking (nhanh nhất với các puzzle vừa và nhỏ)
game.solve(solver_name="backtracking")
# Brute Force (chỉ dùng với puzzle rất nhỏ)
game.solve(solver_name="brute_force")
# A* Search (tốt cho puzzle lớn)
game.solve(solver_name="astar")
# SAT Solver (hiệu quả với puzzle phức tạp)
game.solve(solver_name="sat")
So sánh các thuật toán
from src.game.game import Game
import numpy as np
# Load puzzle
grid = np.loadtxt("input/medium_1.txt", delimiter=",", dtype=int)
methods = ["backtracking", "astar", "sat"]
for method in methods:
# Tạo game mới cho mỗi thuật toán
from src.hashiwokakero.hashiwokakero import Hashiwokakero
puzzle = Hashiwokakero(grid.copy())
game = Game(puzzle)
# Giải và lấy thống kê
success = game.solve(solver_name=method)
stats = game.get_stats()
if success:
print(f"{method}: {stats['time']:.4f}s")
else:
print(f"{method}: Failed")
Visualize puzzle
from src.game.game import Game
from src.visualize.visualize import visualize_puzzle
# Load puzzle
game = Game.from_file("input/easy_1.txt")
# Visualize puzzle ban đầu
visualize_puzzle(game.puzzle.grid, game.puzzle.nodes, game.puzzle.edges, "Original")
# Giải puzzle
game.solve(solver_name="backtracking")
# Visualize sau khi giải
visualize_puzzle(game.puzzle.grid, game.puzzle.nodes, game.puzzle.edges, "Solution")
Visualize GUI
python src/visualize/visualize.py
Input Format
Puzzle được lưu dưới dạng CSV file:
0,2,0,3,0
1,0,0,0,2
0,0,4,0,0
Mỗi số là một island với số cầu cần thiết
0 là ô trống
Kết quả thử nghiệm
Xem notebook notebook/solver_comparison.ipynb để xem phân tích chi tiết về hiệu suất của các thuật toán.
Generator
Generator sử dụng thư viện bridges-generator từ npm để tạo các puzzle Hashiwokakero hợp lệ và có thể giải được.
Yêu cầu cho Generator
Node.js và npm: Generator gọi thư viện JavaScript nên cần Node.js
Python 3.x: Để chạy wrapper Python
Dependencies: numpy (đã có trong requirements.txt)