package codetest1;
import java.util.*;
public class Test2 {
static class Node {
int m;
int s;
int count;
public Node(){
this.m=0;
this.s=0;
this.count=0;
}
}
public static int findMin(Node start,int n){
Queue<Node> queue = new LinkedList<Node>();
queue.add(start);
while(!queue.isEmpty()){
Node node = queue.poll();
if(node.s == n){
return node.count;
}else if(node.s<n){
Node node1 = new Node();
Node node2 = new Node();
int count = ++node.count;
node1.m = node.s; node1.s = node.s*2; node1.count=count;
node2.m = node.m; node2.s = node.s+node.m; node2.count=count;
queue.add(node1);
queue.add(node2);
}
}
return -1;
}
public static void main(String[] args){
Node start = new Node();
start.s=1;start.m=1;start.count=0;
long time = System.currentTimeMillis();
int result = findMin(start, 9999);
System.out.println("\r<br>执行耗时 : "+(System.currentTimeMillis()-time)/1000f+" 秒 ");
System.out.println(result);
}
}
#include<iostream>
#include<queue>
#include<time.h>
using namespace std;
class Node {
public:
int m;
int s;
int count;
Node(){
this->m = 0;
this->s = 0;
this->count = 0;
}
Node(int m, int s, int count){
this->m = m;
this->s = s;
this->count = count;
}
};
int findMin(Node* start, int n){
queue<Node*> q;
q.push(start);
while (!q.empty()){
Node* node = q.front();
q.pop();
if (node->s == n){
return node->count;
}
else if (node->s<n){
int count = ++node->count;
q.push(new Node(node->s,node->s*2,count));
q.push(new Node(node->m,node->s+node->m,count));
}
delete node;
}
return -1;
}
int main(){
clock_t starttime, finishtime;
Node* start = new Node(1,1,0);
starttime = clock();
int result = findMin(start,9999);
finishtime = clock();
cout <<"时间:"<<(double)(finishtime-starttime)/CLOCKS_PER_SEC<<" "<< result << endl;
//System.out.println("\r<br>执行耗时 : " + (System.currentTimeMillis() - time) / 1000f + " 秒 ");
system("pause");
//.out.println(result);
}
同样的思想用的广搜,为什么c++的代码比java的慢这么多呀