Notice: Undefined index: class in /home/xuantuye/domains/xuantuyen.education/public_html/project/user/edit/projectUserEditPYTHONPage.inc on line 18
DungTich = [3, 5, 9]
TrangThai = [[0, 0, 0, 0, 0]]
# Hàm kiểm tra xem trạng thái đã có chưa
def TimKiem(TrangThaiCanTim):
KetQua = False
for i in range (0, len(TrangThai)):
if (TrangThaiCanTim == TrangThai[i][2 : 5]):
KetQua = True
return KetQua
# Hàm kiểm tra bài toán đã được giải chưa
def BaiToan(TrangThaiCanKiemTra):
if (TrangThaiCanKiemTra[0] == 1) and (TrangThaiCanKiemTra[2] == 7):
#if (TrangThaiCanKiemTra[2] == 9):
return True
else:
return False
ViTriHienTai = 0
TiepTuc = True
GiaiDuoc = False
while (TiepTuc == True):
TrangThaiHienTai = TrangThai[ViTriHienTai][2 : 5]
# Hành động 01: Đổ nước đầy bình 1
if (TiepTuc == True):
TrangThaiMoi = [DungTich[0], TrangThaiHienTai[1], TrangThaiHienTai[2]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 1, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 02: Đổ hết nước trong bình 1
if (TiepTuc == True):
TrangThaiMoi = [0, TrangThaiHienTai[1], TrangThaiHienTai[2]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 2, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 03: Đổ nước từ bình 1 qua bình 2
if (TiepTuc == True):
if ((TrangThaiHienTai[0] > 0) and (DungTich[1] - TrangThaiHienTai[1] > 0)):
if (TrangThaiHienTai[0] > (DungTich[1] - TrangThaiHienTai[1])):
TrangThaiMoi = [TrangThaiHienTai[0] - DungTich[1] + TrangThaiHienTai[1], DungTich[1], TrangThaiHienTai[2]]
else:
TrangThaiMoi = [0, TrangThaiHienTai[1] + TrangThaiHienTai[0], TrangThaiHienTai[2]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 3, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 05: Đổ nước đầy bình 2
if (TiepTuc == True):
TrangThaiMoi = [TrangThaiHienTai[0], DungTich[1], TrangThaiHienTai[2]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 5, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 06: Đổ hết nước trong bình 2
if (TiepTuc == True):
TrangThaiMoi = [TrangThaiHienTai[0], 0, TrangThaiHienTai[2]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 6, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 07: Đổ nước từ bình 2 qua bình 1
if (TiepTuc == True):
if ((TrangThaiHienTai[1] > 0) and (DungTich[0] - TrangThaiHienTai[0] > 0)):
if (TrangThaiHienTai[1] > (DungTich[0] - TrangThaiHienTai[0])):
TrangThaiMoi = [DungTich[0], TrangThaiHienTai[1] - DungTich[0] + TrangThaiHienTai[0], TrangThaiHienTai[2]]
else:
TrangThaiMoi = [TrangThaiHienTai[0] + TrangThaiHienTai[1], 0, TrangThaiHienTai[2]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 7, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 08: Đổ nước từ bình 2 qua bình 3
if (TiepTuc == True):
if ((TrangThaiHienTai[1] > 0) and (DungTich[2] - TrangThaiHienTai[2] > 0)):
if (TrangThaiHienTai[1] > (DungTich[2] - TrangThaiHienTai[2])):
TrangThaiMoi = [TrangThaiHienTai[0], TrangThaiHienTai[1] - DungTich[2] + TrangThaiHienTai[2], DungTich[2]]
else:
TrangThaiMoi = [TrangThaiHienTai[0], 0, TrangThaiHienTai[2] + TrangThaiHienTai[1]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 8, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 09: Đổ nước đầy bình 3
if (TiepTuc == True):
TrangThaiMoi = [TrangThaiHienTai[0], TrangThaiHienTai[1], DungTich[2]]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 9, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 10: Đổ hết nước trong bình 3
if (TiepTuc == True):
TrangThaiMoi = [TrangThaiHienTai[0], TrangThaiHienTai[1], 0]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 10, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 11: Đổ nước từ bình 3 qua bình 1
if (TiepTuc == True):
if ((TrangThaiHienTai[2] > 0) and (DungTich[0] - TrangThaiHienTai[0] > 0)):
if (TrangThaiHienTai[2] > (DungTich[0] - TrangThaiHienTai[0])):
TrangThaiMoi = [DungTich[0], TrangThaiHienTai[1], TrangThaiHienTai[2] - DungTich[0] + TrangThaiHienTai[0]]
else:
TrangThaiMoi = [TrangThaiHienTai[0] + TrangThaiHienTai[2], TrangThaiHienTai[1], 0]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 11, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
# Hành động 12: Đổ nước từ bình 3 qua bình 2
if (TiepTuc == True):
if ((TrangThaiHienTai[2] > 0) and (DungTich[1] - TrangThaiHienTai[1] > 0)):
if (TrangThaiHienTai[2] > (DungTich[1] - TrangThaiHienTai[1])):
TrangThaiMoi = [TrangThaiHienTai[0], DungTich[1], TrangThaiHienTai[2] - DungTich[1] + TrangThaiHienTai[1]]
else:
TrangThaiMoi = [TrangThaiHienTai[0], TrangThaiHienTai[1] + TrangThaiHienTai[2], 0]
if (TimKiem(TrangThaiMoi) == False):
TrangThai.append([ViTriHienTai, 12, TrangThaiMoi[0], TrangThaiMoi[1], TrangThaiMoi[2]])
if (BaiToan(TrangThaiMoi) == True):
TiepTuc = False
GiaiDuoc = True
if (TiepTuc == True):
ViTriHienTai += 1
if (ViTriHienTai > len(TrangThai)):
TiepTuc = False
if (GiaiDuoc == True):
print("Tìm được lời giải như sau:")
TiepTuc = True
ViTriHienTai = len(TrangThai) - 1
LoiGiai = []
while (TiepTuc == True):
TrangThaiHienTai = TrangThai[ViTriHienTai]
LoiGiai.insert(0, TrangThaiHienTai)
ViTriHienTai = TrangThaiHienTai[0]
if (ViTriHienTai == 0):
TiepTuc = False
for i in range (0, len(LoiGiai)):
if (LoiGiai[i][1] == 1):
print("- Đổ đầy nước vào bình 1, ta được ", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 2):
print("- Đổ hết nước khỏi bình 1, ta được ", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 3):
print("- Đổ nước từ bình 1 vào bình 2, ta được", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 4):
print("- Đổ nước từ bình 1 vào bình 3, ta được", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 5):
print("- Đổ đầy nước vào bình 2, ta được ", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 6):
print("- Đổ hết nước khỏi bình 2, ta được ", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 7):
print("- Đổ nước từ bình 2 vào bình 1, ta được", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 8):
print("- Đổ nước từ bình 2 vào bình 3, ta được", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 9):
print("- Đổ đầy nước vào bình 3, ta được ", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 10):
print("- Đổ hết nước khỏi bình 3, ta được ", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
elif (LoiGiai[i][1] == 11):
print("- Đổ nước từ bình 3 vào bình 1, ta được", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
else:
print("- Đổ nước từ bình 3 vào bình 2, ta được", LoiGiai[i][2],LoiGiai[i][3],LoiGiai[i][4])
else:
print("Không tìm được lời giải")