forked from john-science/mazelib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmerge_matrices_final.py
146 lines (126 loc) · 5.38 KB
/
merge_matrices_final.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
def read_matrix_from_file(file_name):
matrix = []
with open(file_name, "r") as file:
for line in file:
row = list(map(int, line.strip().split()))
matrix.append(row)
return matrix
def find_3_position(matrix):
for index_row, row in enumerate(matrix):
if 3 in row:
index_col = row.index(3)
return index_row, index_col
return None, None
def merge_matrices(matrix1, matrix2):
row_3_matrix1, col_3_matrix1 = find_3_position(matrix1)
row_3_matrix2, col_3_matrix2 = find_3_position(matrix2)
if col_3_matrix1 > col_3_matrix2:
front_matrix = matrix1
row_3_front_matrix = row_3_matrix1
behind_matrix = matrix2
row_3_behind_matrix = row_3_matrix2
else:
front_matrix = matrix2
row_3_front_matrix = row_3_matrix2
behind_matrix = matrix1
row_3_behind_matrix = row_3_matrix1
delta_row = row_3_behind_matrix - row_3_front_matrix
merge_matrix = []
if delta_row == 0:
if len(front_matrix) > len(behind_matrix):
for i in range(0, len(behind_matrix)):
merge_matrix[i] = front_matrix[i][:-1] + behind_matrix[i]
for i in range(len(behind_matrix), len(front_matrix)):
merge_matrix.append(
front_matrix[i] + [4] * len(behind_matrix[0][:-1]))
elif len(front_matrix) < len(behind_matrix):
for i in range(0, len(front_matrix)):
merge_matrix[i] = front_matrix[i][:-1] + behind_matrix[i]
for i in range(len(front_matrix), len(behind_matrix)):
merge_matrix.append(
[4] * len(front_matrix[0][:-1]) + behind_matrix[i])
else:
for i in range(0, len(front_matrix)):
merge_matrix[i] = front_matrix[i][:-1] + behind_matrix[i]
elif delta_row > 0:
for i in range(0, delta_row):
merge_matrix.append(
[4] * len(front_matrix[0][:-1]) + behind_matrix[i])
delta = len(behind_matrix) - delta_row - len(front_matrix)
if delta < 0:
for i in range(delta_row, len(behind_matrix)):
merge_matrix.append(
front_matrix[i - delta_row][:-1] + behind_matrix[i])
for i in range(len(behind_matrix) - delta_row, len(front_matrix)):
merge_matrix.append(
front_matrix[i] + [4] * len(behind_matrix[0][:-1]))
elif delta > 0:
for i in range(0, len(front_matrix)):
merge_matrix.append(
front_matrix[i][:-1] + behind_matrix[i + delta_row])
for i in range(len(front_matrix) + delta_row, len(behind_matrix)):
merge_matrix.append(
[4] * len(front_matrix[0][:-1]) + behind_matrix[i])
else:
for i in range(0, len(front_matrix)):
merge_matrix.append(
front_matrix[i][:-1] + behind_matrix[i + delta_row])
elif delta_row < 0:
for i in range(0, -1 * delta_row):
merge_matrix.append(
front_matrix[i] + [4] * len(behind_matrix[0][:-1]))
delta = len(front_matrix) - (-1 * delta_row) - len(behind_matrix)
if delta < 0:
for i in range(-1 * delta_row, len(front_matrix)):
merge_matrix.append(
front_matrix[i][:-1] + behind_matrix[i - (-1 * delta_row)])
for i in range(len(front_matrix) - (-1 * delta_row), len(behind_matrix)):
merge_matrix.append(
[4] * len(front_matrix[0][:-1]) + behind_matrix[i])
elif delta > 0:
for i in range(0, len(behind_matrix)):
merge_matrix.append(
front_matrix[i + (-1 * delta_row)][:-1] + behind_matrix[i])
for i in range(len(behind_matrix) + (-1 * delta_row), len(front_matrix)):
merge_matrix.append(
front_matrix[i] + [4] * len(behind_matrix[0][:-1]))
else:
for i in range(0, len(behind_matrix)):
merge_matrix.append(
front_matrix[i + (-1 * delta_row)][:-1] + behind_matrix[i])
return merge_matrix
def standardize_matrix(matrix):
for row in matrix:
if row[0] == 3 or row[-1] == 3:
for i in range(len(row)):
if row[i] == 3:
row[i] = 1
else:
for i in range(len(row)):
if row[i] == 3:
row[i] = 0
return matrix
def print_matrix(matrix, title="Matrix"):
print(f"{title}:")
for row in matrix:
print(row)
def write_matrix_to_file(matrix, file_name):
with open(file_name, "w") as file:
for row in matrix:
file.write(" ".join(map(str, row)) + "\n")
# Tên file đầu vào
input_file1 = "maze_txt/1.txt"
input_file2 = "maze_txt/10.txt"
# Đọc hai ma trận từ file
matrix1 = read_matrix_from_file(input_file1)
matrix2 = read_matrix_from_file(input_file2)
# # Ghép hai ma trận
merged_matrix = merge_matrices(matrix1, matrix2)
standardized_matrix = standardize_matrix(merged_matrix)
# # In và ghi ma trận ghép
output_file_name = "maze_txt/1_10_v2.txt"
write_matrix_to_file(standardized_matrix, output_file_name)
print(f"\nMerged Matrix written to: {output_file_name}")
# input_file1 = "maze_txt/1.txt"
# input_file2 = "maze_txt/10.txt"
# output_file_name = "maze_txt/1_10.txt"