[英]My program is crashing when flipping bits
我有此功能,显然它导致我的程序崩溃:
long long todos(long long x,long long i) {
x ^= (1 << i);
long long aux = i - 1;
if(aux >= 0) x ^= (1 << aux);
aux = i - 4;
if(aux >= 0) x ^= (1 << aux);
aux = i + 1;
if(aux < 16) x ^= (1 << aux);
aux = i + 4;
if(aux < 16) x ^= (1 << aux);
return x;
}
我不明白的是为什么当我更改所有的^= (
对于&= ~(
它运行得很好时(尽管我得到的输出是不同的)。)对此行为有逻辑上的解释吗?
如果您需要完整的代码: http : //ideone.com/Z7qoof
看起来您的dp()
函数的循环非常深。 考虑到调用dp(3)
可以按^
顺序评估所有65536个可能的位板,而使用&~
调用dp(k)
只会对数字在k
之前的位板进行评估。 注意,您mat
顺序在main()
填写mat
; 如果您仅在数字上依赖于k
之前的位板,则不会进行很深的递归。
编辑 :至于解决此问题,您可能会认为动态编程是有向无环图中最短的路径。 问题是您在这里没有非循环图。 您正在进行深度优先搜索,以在此处查找最短路径,但这不起作用。 尝试用广度优先搜索或Dijkstra算法替换它。
我的猜测是这行崩溃了:
cout << mat [bs.to_ulong()] << endl;
由于bs大于1 << 16的保留空间
ps为什么对所有内容都使用long long数据类型? long long是64位。 您做的大多数事情都可能用一个短整数完成
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.