我的程序在翻转位时崩溃
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()
;如果你在k
之前只在数字上依赖于位板,你不会非常深入地递归。
编辑:至于解决这个问题,你可能会认为动态规划是有向无环图中最短的路径。 问题是你这里没有一个无环图。 您正在执行深度优先搜索以在此处查找最短路径,这不会...工作。 尝试用广度优先搜索或Dijkstra算法替换它。
我的猜测是这一行崩溃了:
cout <<mat[bs.to_ulong()] <<endl;
由于 BS 大于 1<<16 的保留空间
附言:为什么对所有内容都使用long long 数据类型?long long 是 64 位。你做的大多数事情都可能用一个简短的int来完成
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 我的程序在翻转位时崩溃