之前一直用c++写程序 所以考虑程序一般都比较容易往数据结构的方向想 而自己设计数据结构往往要费很大事 昨天看了一下python 发现脚本语言 真是厉害 用来进行模拟运算确实不错 可以先想个解决问题的思路 用python 先测试一下 如果可行 如果为了运行效率 使用c++改写 确实是一个不错的选择
昨天在看操作系统的时候看到这么一个题目
这个题目是操纵系统中典型的为多个进程分配资源 最后达到安全状态的题目,可以理解为找一条安全路径
如果使用c++来写 那就用深度优先搜索算法 然后就要慢慢思考解决办法了 , 为了练习刚刚学习的python 我使用python的 numpy来解决这个问题
因为还没有学怎么写函数 所以写成四个循环了 不过算法复杂度应该差不多, 准备再学一段时间后 优化一下
import numpy a=numpy.array(([1,1,2,4], [0,1,2,2], [1,1,1,0], [1,1,1,1])) b=numpy.array(([1,2,3,6], [1,1,2,2], [1,2,1,1], [1,1,2,3])) c=numpy.array([0,1,0,1]) d=b-a for i in range(0,4): j = 0 for j in range(0,4): if d[i][j]>c[j]: break # print 'e' # if j==3 and d[i][j]<=c[j]: else: e=numpy.array([0,0,0,0]) f=c e[i]=1 f=f+d[i] d[i]=numpy.array((0,0,0,0)) for k in range(0,4): if e[k]==1: continue n = 0 for n in range(0,4): if d[k][n]>f[j]: break; # if n==3 and d[k][n]<=f[j]: else: e[k]=1 f=f+d[k] d[k]=numpy.array((0,0,0,0)) for m in range(0,4): if e[m]==1:continue p = 0 for p in range(0,4): if d[m][p]>f[p]:break # print p # print m # if p==3 and d[m][p]<=f[p]: else: e[m]=1 f=f+d[m] d[m]=numpy.array((0,0,0,0)) for q in range(0,4): if e[q]==1:continue r = 0 for r in range(0,4): if d[q][r]>f[r]:break # if r==3 and d[q][r]<=f[r]: else: print i+1 print k+1 print m+1 print q+1 # print 'heihei' exit() d[m]=b[m]-a[m] e[m]=0 d[k]=b[k]-a[k] e[k]=0 d[i]=b[i]-a[i] e[i]=0