我正在制定计划,以找出解决学校项目高峰时间类型问题所需的行动次数。 (Like this.)我已经让它工作了,我正在努力让它运行得更快。我已经为我的跑步计时,并决定添加一个计数器来查看我经历的循环次数,并注意到我的运行时间下降了很多。从平均2.5秒到平均0.1秒。
这是我的主要代码:
int main() {
board test;
map<string, bool> dejavu;
map<string, bool>::iterator it;
queue<board> q;
int runs=1;
test.loadBoard();
int abcd=0; //This is the line which changes runtime.
Timer t;
t.start();
while( test.numCars>0) {
q.push(test);
dejavu.insert(make_pair(test.data,0));
int n=test.numCars;
int m;
bool done = test.solved( m );
while( !q.empty() && !done ) {
test = q.front();
q.pop();
for( int i=0; i<n && !done; i++ ) {
if( test.moveVehicleForward(i)) {
test.moves++;
if( test.solved(m) ) {
done = true;
}
if( dejavu.end() == dejavu.find(test.data) ) {
q.push(test);
dejavu.insert(make_pair(test.data,0));
}
test.moveVehicleBack(i);
test.moves--;
}
if( test.moveVehicleBack(i)) {
test.moves++;
if( test.solved(m) ) {
done = true;
}
if( dejavu.end() == dejavu.find(test.data) ) {
q.push(test);
dejavu.insert(make_pair(test.data,0));
}
test.moveVehicleForward(i);
test.moves--;
}
}
}
q=queue<board>();
// cout << "Scenario " << runs << " requires " << m << " moves" << endl;
runs++;
test.loadBoard();
}
t.stop();
cout << "Runtime: " << t.getElapsedTime() << endl;
return 0;
}
我的课程板不使用动态内存。该课程由一个&#34; Board&#34; 1D阵列映射为2D阵列,电路板上的汽车数量,已完成的移动次数以及每辆汽车在电路板上的放置位置数据。
供参考,使用存在的代码行运行时间
与该行相同的测试用例注释掉了
(第一个测试用例是this,其中有两个简单的例子。)
编辑:编译时不使用优化,但使用-O3优化时运行时相同。