C语言定义时初始化数组解决思路
C语言定义时初始化数组定义如下数组C/C++ codeconst int INF 0x3f3f3fint vis[V_MAX] {0}/*是否已被
C语言定义时初始化数组
定义如下数组
C/C++ codeconst int INF = 0x3f3f3f;int vis[V_MAX] = {0}; /*是否已被访问标志*/int dis[V_MAX] = {INF}; /*距离值*/
需要将dis的数组所有内容都初始化为INF,而不是通过调用memset来完成,该如何做
[解决办法]用memset不是很好嘛?
否则只能int dis[V_MAX] = {INF, INF, INF...一直写下去了吧};
[解决办法]下面的代码只是变相回答你1楼贴中的“不调用memset”来初始化,效率估计会比直接 memset 还要差
另外,你提交超时应该不是memset的问题,大部分是因为算法问题,建议再想想
C/C++ code const int INF = 0x3f3f3f; int vis[V_MAX] = {0}; __asm { mov eax, V_MAX mov ebx, 4 mul ebx mov ecx, eax mov eax, ebp sub eax, 4 sub eax, ecx mov ebx, INFprep: sub eax, 4 mov dword ptr [eax], ebx sub ecx, 4 jnz prep } int dis[V_MAX];
[解决办法]
用汇编语言吧
[解决办法]
用一个for循环就好了啊
[解决办法]
为啥跟memset纠结呢?先说说你的算法是什么呢?
[解决办法]
感觉是你使用队列实现 dijkstra 存在问题,是不是算法问题没仔细看
[解决办法]
[解决办法]
memset();我想肯定是需要占用执行时间的。
memset(dis, INF, V_MAX*4);
[解决办法]
[解决办法]
像单个for不嵌套,一般不用考虑时间的,所以memset跟本不用考虑时间,或用一个for初始化也不用考虑时间的,肯定是其它地方for嵌套的问题
[解决办法]
问题不是memset
而是
register priority_queue<Node,vector<Node>,greater<Node> > que;
首先你这个队列是无法用register的。
另外,你的这个队列用的应该是标准的stl分配器,嘿嘿,消耗你cpu的不是memset,而是内存分配。
你可以尝试换一个内存池试试。
[解决办法]
static保证vis为全0
搜“stosd汇编指令”
[解决办法]
赞LZ啊, 牛
[解决办法]
就用memset啊