public override void Execute() { openset.Enqueue(new PriorityQueueState(CurrentState), 0); cost_so_far.Add(CurrentState.Key, 0); Console.WriteLine("Initial State:"); CurrentState.Format(); watch = new Stopwatch(); watch.Start(); while (openset.Count > 0) { var currentnode = openset.Dequeue(); CurrentState = currentnode.NodeState; if (CurrentState.IsEqualToGoal()) { watch.Stop(); SolutionFound(CurrentState); Console.WriteLine("Elapsed time: {0} ms", watch.Elapsed.Milliseconds); return; } else { var children = CurrentState.BuildChildren(); foreach (var child in children) { var new_cost = cost_so_far[CurrentState.Key] + 1; //1 refers to the distance between the current node and its childrens if (!cost_so_far.ContainsKey(child.Key) || new_cost < cost_so_far[child.Key]) { cost_so_far[child.Key] = new_cost; int priority = 0; if (use_manhattan) { priority = new_cost + ManVal(child.StateArray); } else { priority = new_cost + HammingDistance(child.StateArray); } openset.Enqueue(new PriorityQueueState(child), (double)priority); if (!parents.ContainsKey(child.Key)) { parents[child.Key] = CurrentState; } } } } } }
public void TestPeekVCount() { queue u3 = new queue(10); u3.Enqueue(1); u3.Enqueue(2); u3.Enqueue(3); Assert.AreEqual(1, u3.peek()); Assert.AreEqual(3, u3.checkCount()); }
public void TestCreatQueue() { queue u1 = new queue(10); u1.Enqueue(1); u1.Enqueue(2); u1.Enqueue(3); u1.Enqueue(4); Assert.AreEqual(4, u1.checkCount()); }
static void Main(string[] args) { queue user = new queue(10); user.Enqueue(1); user.Enqueue(2); user.Enqueue(3); user.Enqueue(4); user.Enqueue(5); Console.WriteLine(@"----The count at begin when user push ell"); user.checkCount(); // user Dequeue 1 element Console.WriteLine(@"----Dequeue-----"); user.Dequeue(); Console.WriteLine(@"----Check count after Dequeue----"); /* check count after dequeue ( the count will -1 element after Dequeue ) * when user Dequeue ele that ele will go out the Queue */ user.checkCount(); // user wanna peek in queue Console.WriteLine(@"----Peek----"); user.peek(); // peek different than Dequeue because : when user peek the count not change; Console.WriteLine(@"-----Check count afete Peek-----"); user.checkCount(); // push 1 ele user.Enqueue(6); user.Enqueue(7); user.Enqueue(8); user.Enqueue(9); Console.WriteLine(@"-----The count after Enqueue-----"); // then check count ? is it changing ? user.checkCount(); }
public void TestDequeue() { queue u2 = new queue(10); u2.Enqueue(1); u2.Enqueue(2); u2.Enqueue(3); u2.Enqueue(4); Assert.AreEqual(1, u2.Dequeue()); Assert.AreEqual(2, u2.Dequeue()); }
public override void Execute() { openset.Enqueue(new PriorityQueueState(CurrentState), 0); Console.WriteLine("Initial State:"); CurrentState.Format(); watch = new Stopwatch(); watch.Start(); while (openset.Count > 0) { var currentnode = openset.Dequeue(); CurrentState = currentnode.NodeState; if (CurrentState.IsEqualToGoal()) { watch.Stop(); SolutionFound(CurrentState); Console.WriteLine("Elapsed time: {0} ms", watch.Elapsed.Milliseconds); return; } else { var children = CurrentState.BuildChildren(); foreach (var child in children) { if (!parents.ContainsKey(child.Key)) { int priority = ManVal(child.StateArray); openset.Enqueue(new PriorityQueueState(child), (double)priority); parents[child.Key] = CurrentState; } } } } }
/// <summary> /// 添加数据 /// </summary> /// <param name="nodes"></param> void push(node[] nodes) { Interlocked.Decrement(ref thread); while (thread != 0) { Thread.Sleep(0); } foreach (node node in nodes) { if ((node.Value & 1023) == 0) { Thread.Sleep(0); } queue.Enqueue(node); } pushEnd = 1; Console.WriteLine("push end"); }
/// <summary> /// 添加数据 /// </summary> /// <param name="nodes"></param> void push(node[] nodes) { Interlocked.Decrement(ref pushThread); while (pushThread != 0) { Thread.Sleep(0); } foreach (node node in nodes) { if ((node.Value & 1023) == 0) { Thread.Sleep(0); } queue.Enqueue(node); } if (Interlocked.Decrement(ref pushEndThread) == 0) { Console.WriteLine("concurrent push end"); } }