ネットワーク
質問する
ネットワークとは、コンピュータ間で情報を交換する接続形式を指す.例えば、コンピュータAがコンピュータBに直接接続され、コンピュータBがコンピュータCに直接接続されている場合、コンピュータAとコンピュータCは間接的に接続されて情報を交換することもできる.そのため、コンピュータA、B、Cは同じネットワーク上に存在する.
指定されたコンピュータの個数nが、接続情報を含む2次元配列コンピュータをパラメータとする場合、ネットワークの個数を返すために解関数を記述します.
せいげんじょうけん
コンピュータの個数nは、1又は複数の200以下の自然数である.
各コンピュータは0からn−1までの整数で表される.
i番コンピュータがj番コンピュータに接続されている場合、コンピュータ[i][j]は1として表される.
コンピュータ[i][i]は常に1.
I/O例
ncomputersreturn3[[1, 1, 0], [1, 1, 0], [0, 0, 1]]23[[1, 1, 0], [1, 1, 1], [0, 1, 1]]1
I/O例説明
例1
次の2つのネットワークがあります.
例2
次のようにネットワークがあります.
問題を解く
しょかい
def solution(n,computers):
answer=0
queue=[0]*n
def recur(com,que,a):
if que==0:
que[a]=1
for j in range(n):
if com[a][j]==1 and que[j]==0:
recur(com,que,j)
while 0 in queue:
for i in range(n):
if queue[i]==0:
recur(computers,queue,i)
answer+=1
return answer
2番目の解def solution(n, computers):
answer = 0
stack=[0]*n
def dfs(root):
if stack[root]==1:
return
stack[root]=1
for i in range(n):
if computers[root][i]==1 and root!=i:
dfs(i)
for i in range(n):
if stack[i]==0:
dfs(i)
answer+=1
return answer
computers
中には双方向graph
の形態があるため、直接n
個の繰り返しゲートを利用して接続するすべてのノードを探索する.stack
というアクセスリストを作成し、dfs
関数の起動時にアクセスしたノードであるかを確認します.来訪者照還、非来訪者はstack[root]=1
で来訪を示す.computers[root][i]
値1
本人ノードでなければ再度dfs
関数が次のノードにアクセスする.return
最初for / if 문
に戻るのでanswer+=1
ネットワーク個数の計算を行います.何を使っているのか分からない鬼が何を書いているのかコード
2番目のコードは,ある程度のBFS/DFS概念を把握して解読したコードである.2つ目の問題かもしれませんが、すぐに解決できます.
原理が同じなので、似たようなコードは偽物です.
Reference
この問題について(ネットワーク), 我々は、より多くの情報をここで見つけました https://velog.io/@nuri00/네트워크テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol