#やりたいこと
格子状グラフでの最短経路とかの問題を見たので、ダイクストラ法とかを使えるようにn×mの格子状グラフから隣接行列を生成したい!
#ソースコード
grid_adl_generator.py
def grid_adj_matrix(g,h):#格子状グラフがg行h列の頂点から成るとする
#頂点番号は0~g*h-1とする
#内側、境界上の辺、境界上の頂点の3グループに分割して計算する
N=g*h
adj_matrix=[]
for i in range(N):
tmp_i=[]
for j in range(N):
#格子状グラフの内部を考える.
if 0<i//h<g-1: #点iの行が内側であることの条件は0<i//h<g-1.
if 0<i%h<h-1:#点iの列が内側であることの条件は0<i%h<h-1.
if j-i in [-1,1,-h,h]:
tmp_i.append(1)
else:
tmp_i.append(0)
#点iが境界上の側面の辺に属する時.左右×2=4の場合分け
if i%h==0:
if j-i in [1,-h,h]:
tmp_i.append(1)
else:
tmp_i.append(0)
if i%h==h-1:
if j-i in [-1,-h,h]:
tmp_i.append(1)
else:
tmp_i.append(0)
#点iの列が内側で境界上の上下の辺に属する時.上下×2=4の場合分け
if 0<i%h<h-1:#列が内側
if i//h==0:#上に属する時
if j-i in [-1,1,h]:
tmp_i.append(1)
else:
tmp_i.append(0)
if i//h==g-1:#下に属する時
if j-i in [-1,1,-h]:
tmp_i.append(1)
else:
tmp_i.append(0)
#点iが4角形の頂点上にある時
else:
if i==0:
if j-i in [1,h]:
tmp_i.append(1)
else:
tmp_i.append(0)
if i==h-1:
if j-i in [-1,h]:
tmp_i.append(1)
else:
tmp_i.append(0)
if i==(g-1)*h:
if j-i in [1,-h]:
tmp_i.append(1)
else:
tmp_i.append(0)
if i==g*h-1:
if j-i in [-1,-h]:
tmp_i.append(1)
else:
tmp_i.append(0)
adj_matrix.append(tmp_i)
return adj_matrix
#main関数:h行w列の格子状グラフから隣接行列を生成
h,w=map(int,input().split())
print(h,w)
print("")
t=grid_adj_matrix(h,w)
for i in range(h*w):
print(t[i])
print("")