我无法找到解决此竞赛问题的好方法。
简历中的statement是。
给定网格 N x M (1≤N,M≤1000), H 代表"空洞&#34 ;在该网格中(0≤H≤100),其中不能遍历其中的边界,并且 Q (1≤Q≤100)查询每个网格中有一个起点( xi , yi )和终点( xf , yf )。为每个查询打印从(xi,yi)到(xf,yf)的最小路径数。因为这个数字可能很大,所以使用mod 10 ^ 9 + 7来避免溢出。
输入
输入由多个测试用例组成,以文件结尾结束。每一个都描述一个地图,并以三个整数N,M和H开始,它们分别是网格的大小和孔的数量。然后,跟随H行,每行有四个整数xi,yi,xf和yf,描述了孔的左下角和右上角。接下来是整数Q,即查询数。然后,在Q行之后,每行有四个整数xi,yi,xf和yf,它们是如上所述的起点和终点。在连续测试之间,有一个空白行。保证在一张地图中,所有的洞都是不相交的,并且总有至少一种方法可以离开。
输入示例:
10 10 0
3
0 0 10 10
0 1 9 10
5 5 5 56 6 2
1 0 2 2
3 2 5 4
1
0 1 4 5
输出
你的程序必须为每个查询输出一行,用最少的移动从(xi,yi)到(xf,yf)的路数(mod 10 ^ 9 + 7)输出。
输出示例:
184756
48620个
146
关于这个问题的BFS需要内存。数学方法(组合)似乎因阻挡角而失败。所以动态编程似乎是最好的。但是,我无法弄清楚如何应对多个查询...