繁体   English   中英

翻转位时我的程序崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM