ZOJ (3497 Mistwald 关于矩阵求点直接连通的问题)

spoiler posted @ 2011年4月29日 15:48 in 十个利用矩阵乘法解决的经典题目 , 2713 阅读

题目大意:给你一个N*M 的矩阵, 矩阵里的每个点代表一个全送阵, 代表当前点可以全送到4个点,你的出发点是(1,1);要到达的点是(n,m),这里要注意的是,一旦任何点到了(n,m)点之后 就会被全送出去,离开整个地图,所以这里算是一个陷阱,您要把(n,m)点能够到达的点,全部置0,(”0“代表他不能到达某个点)

题目分析:

这里是Maxtrix67 大牛总结的 第八个矩阵的经典应用:

给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值
把 给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就 等于从点i到点j恰好经过2条边的路径数(枚举k为中转点。类似地,C*A的第i行第j列就表示从i到j经过3条边的路径数。同理,如果要求经过k步的 路径数,我们只需要二分求出A^k即可;

题目让我们求的是他们是否连通,这里只需用1与0带入即可,

我们这里在乘的过程不是求和,而是用到“与”操作,因为我们要得出的结果不是路径数,而是 是否能经过K步到达该点~

代码+部分注释:

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter