Satır veya sütun 0 varsa, 0 matristeki her bir hücre kümesi
0'lar ve 1'ler ile NxN bir matris verilmiştir. 0
s 0
içerir 0
0
s içeren her sütun kümesi her satır ayarlayın.
Örneğin
1 0 1 1 0
0 1 1 1 0
1 1 1 1 1
1 0 1 1 1
1 1 1 1 1
sonuçları
0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
0 0 1 1 0
Microsoft Mühendisi, fazladan bellek, sadece iki boolean değişkenleri ve tek seferde içeren bir çözüm yok, cevap arıyorum, böylece söyledi.
BTW, matrix, bu nedenle sadece 1'ler ve 0'lar matris içinde bekleyin biraz düşünün.
CEVAP
Tamam, çok yorgunum gibi sabah 3'te burada, ama benim ilk deneyin yerinde tam 2 geçer her sayı matrisi, yani O(NxN) ve doğrusal boyutu, matris.
1. tek satır/sütun nerede olduğunu bilmek işaretleri olarak 1rst sütun ve ilk satır kullanıyorum. O zaman, eğer 1rst satır/sütun 1 de ise tüm hatırlamak 2 değişkenler l ve c vardır. Bu yüzden ilk geçiş işaretleri ayarlar ve 0'lar gerisini sıfırlar.
İkinci geçiş satırlar ve sütunlar 1 ve sıfırlar 1 satır/sütun B ve c olarak işaretlenmiş yerlerde 1 ayarlar.
Sonunda başlangıçta kareler kareler bağlı olarak 1 seferde bitirebilirim şiddetle şüpheliyim. Belki 2 kartım daha verimli... yapılabilir
import pprint
m = [[1, 0, 1, 1, 0],
[0, 1, 1, 1, 0],
[1, 1, 1, 1, 1],
[1, 0, 1, 1, 1],
[1, 1, 1, 1, 1]]
N = len(m)
### pass 1
# 1 rst line/column
c = 1
for i in range(N):
c &= m[i][0]
l = 1
for i in range(1,N):
l &= m[0][i]
# other line/cols
# use line1, col1 to keep only those with 1
for i in range(1,N):
for j in range(1,N):
if m[i][j] == 0:
m[0][j] = 0
m[i][0] = 0
else:
m[i][j] = 0
### pass 2
# if line1 and col1 are ones: it is 1
for i in range(1,N):
for j in range(1,N):
if m[i][0] & m[0][j]:
m[i][j] = 1
# 1rst row and col: reset if 0
if l == 0:
for i in range(N):
m [i][0] = 0
if c == 0:
for j in range(1,N):
m [0][j] = 0
pprint.pprint(m)
"Klonlama" satır veya sütun ...
Güncelleştirme veya Ekleme (çoklu satı...
Dinamik hücre düzenleri için UİTableVi...
Nasıl baskı yeni satır veya boşluk olm...
Bir sütun için Max değerine sahip geti...