Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 边数_Python_Math - Fatal编程技术网

Python 边数

Python 边数,python,math,Python,Math,给你一个网格;具有n行行;和m列其中两个单元格被称为相邻,如果:它们有一个公共边 让两个相邻的单元格分别为a和b。因为它们是相邻的;因此;您可以从a转到b;以及从b到a 在图论方面;我们可以说,如果网格被建模为一个有向图;然后,存在从a到b的有向边;以及a从b到;如果单元格a和b相邻 要求您查找图形中有向边的数目 输入格式 输入的第一行包含一个整数T;表示测试用例的数量 然后,t后面跟着行;其中每行包含两个空格分隔的整数n和m;网格的尺寸分别为 样本输入0 1 3 3 24 样本输出0 1

给你一个网格;具有
n行
行;和
m
其中两个单元格被称为相邻,如果:它们有一个公共边

让两个相邻的单元格分别为
a
b
。因为它们是相邻的;因此;您可以从
a
转到
b
;以及从
b
a

在图论方面;我们可以说,如果网格被建模为一个有向图;然后,存在从
a
b
的有向边;以及
a
b
到;如果单元格
a
b
相邻

要求您查找图形中有向边的数目

输入格式

输入的第一行包含一个整数
T
;表示测试用例的数量

然后,<代码>t后面跟着行;其中每行包含两个空格分隔的整数
n
m
;网格的尺寸分别为

样本输入0

1
3 3
24
样本输出0

1
3 3
24
解释0

1
3 3
24

定向边的数目为24。

这种方法正确吗?我的代码确实通过了示例测试用例,但其他代码没有通过

def compute(m,n):
 arr = [[0 for x in range(n)] for y in range(m)] 
 arr[0][0]=2
 arr[n-1][m-1]=2
 arr[0][m-1]=2
 arr[n-1][0]=2
 for i in range (1,m-1):
     arr[i][0]=3
     arr[i][n-1]=3
 for j in range (1,n-1):
     arr[0][j]=3
     arr[n-1][j]=3
 for i in range (1,n-2):
     for j in range (1,m-2):
         arr[i][j]=4
 return sum(sum(arr,[])) +4 


请解释解决此问题的正确方法。提前感谢

我认为您可以使用动态规划解决此问题

m*n中的边数=m-1中的边数)*(n)+待计算的边数

然后,您只需通过
2*n+2*(n-1)

完成列操作并达到
m==1
后,可以将
n
减少到
1

def计算(n,m,和):
如果n==1且m==1:
回报金额
elif m==1:
返回计算(1,1,和+2*(n-1))
其他:
返回计算(n,m-1,和+2*n+2*(n-1))
计算表5x5的(5,5,0)#

对于由n行和m列组成的网格:任何行中的边数为m-1,任何列中的边数为n-1。在相邻单元的图形中,每边都有两条边

因此,n*m网格的边数为:

def compute(n, m):
    return n * (m - 1) * 2 + m * (n - 1) * 2
或者,进一步简化:

def compute(n, m):
    return 4 * n * m - 2 * n - 2 * m

您的算法将填充各个边,并在最后对它们求和,这比没有其他约束的情况下解决此问题所需的复杂得多。

您可以找到一个公式来计算图形中的边数,如下所示: 假设我们有一个维度为nm的网格。对于每个单元,我们需要计算相邻单元的数量。然后,这些数字的总和就是边的数目

情况1)这样的网格有4个角单元格,每个角单元格有2个相邻单元格;总邻居案例1:4*2=8

情况2:这样一个网格的侧面有2(n+m-2)-4个单元格,不包括每个角落有3个邻居,总邻居情况2:(2(n+m-2)-4)3

案例3)这样一个网格具有nm-(2(n+m-2)-4个内部单元,每个单元具有4个邻居,总邻居案例3:*(nm-(2(n+m-2)-4)4

边缘总数=案例1+案例2+案例3=8+(2(n+m-2)-4)3+(nm-(2(n+m-2)-4)-4=4nm-2(n+m)

下图显示了所有情况:

因此,您可以使用下面的代码来计算边的数量:

def compute_total_edges(m,n):
    return 4*n*m-2*(n+m)

print(compute_total_edges(3,3))