²é¿´: 457  |  »Ø¸´: 1

wangcl8659

½ð³æ (СÓÐÃûÆø)

[½»Á÷] ¡¾ÇóÖú¡¿Ê³ÈËħ¹ý³Ì³ÌÐò

ʳÈËħ¹ýºÓÎÊÌâ
£¨1£©Èý¸ö´«½ÌÊ¿¡¢Èý¸öʳÈËħºÍÒ»Ìõ´¬ÔÚºÓµÄ×ó°¶
£¨2£©´«½ÌÊ¿ºÍʳÈËħ¶¼ÄܳŴ¬£¬´¬µÄ×î´ó×¼ÔØÁ¿Îª2£»¶øÇÒµ±Ê³ÈËħ±È´«½ÌÊ¿¶àʱ£¬Ê³ÈËħ»áÉ˺¦´«½ÌÊ¿
£¨3£©Ñ°ÕÒÒ»Öֶɺӷ½°¸

×îºÃÊÇJavaÓïÑÔ£¬ÆäËûÒ²¿ÉÒÔ¡£
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

wangcl8659

½ð³æ (СÓÐÃûÆø)

ÓàÔó³É:±¾°æ²»¹ÄÀøÎ´¾­Ë¼¿¼µÄ×÷ÒµÇóÖú£¡ÍË»¹½ð±Ò£¬¹Ø±Õ´ËÌû£¡ 2010-08-15 16:14:01
ÕâÊÇÍøÉÏÕÒµ½µÄ³ÌÐò¡£
¼øÓÚ±¾ÈËÊÇ´¿¹ÜÀíÀàѧÉú£¬²»¶®±à³Ì£¬µ«ÊÇÓÉÓÚ×÷ÒµÒªÇó£¬Ï£Íû¹Ø×¢Õß°ïæµ÷ÊÔ£¬»òÕßÌṩ²½Ö裬Ôõô°ÑÕâ¸ö³ÌÐò·Åµ½JAVAÖУ¬²¢ÉèÖÃÒ³Ãæ



Æô·¢Ê½º¯ÊýÊÇ(numOfMiss + numOfCann + boatAt - 1) / (capacity - 1);



    /**

     * Æô·¢Ê½ËÑË÷·½°¸

    */

    private void solveInAStar() {



        System.out.println("ÏÖÔÚʹÓÃÆô·¢Ê½ËÑË÷·½°¸";



        Transport[][][] pre = new Transport[numOfMiss + 1][numOfCann + 1][2];



        long begin = initiation();



        Queue queue = new PriorityQueue();



        queue.add(new Status(numOfMiss, numOfCann, 0, -1, 0 + calF(numOfMiss,

                numOfCann, 0)));

        pre[numOfMiss][numOfCann][0] = new Transport(-1, -1, -1);

        dp[numOfMiss][numOfCann][0] = 0;



        boolean solution = false;



        while (!queue.isEmpty()) {



            Status now = queue.remove();



            int leftMiss = now.leftMiss;

            int leftCann = now.leftCann;

            int boatAt = now.boatAt;



            // System.out.printf("%d %d %d %d\n", leftMiss, leftCann, boatAt,

            // now.cost);



            if (leftCann == 0 && leftMiss == 0) {

                int idx = 0;

                while (true) {

                    Transport t = pre[leftMiss][leftCann][boatAt];

                    if (t.a == -1)

                        break;

                    steps[idx++] = t;

                    if (t.boatAt == 0) {

                        leftMiss += t.a;

                        leftCann += t.b;

                    } else {

                        leftMiss -= t.a;

                        leftCann -= t.b;

                    }

                    boatAt = 1 - boatAt;

                }



                for (int i = 0, j = idx - 1; i < j; ++i, --j) {

                    Transport tmp = steps;

                    steps = steps[j];

                    steps[j] = tmp;

                }



                OutputAnswer(idx);



                solution = true;



                break;

            }



            int i, j;



            if (boatAt == 0) {

                for (i = 0; i <= leftMiss && i <= capacity; ++i) {

                    for (j = 0; j <= leftCann && i + j <= capacity; ++j) {

                        if (i + j != 0) {

                            if (checkValidSmaller(leftMiss - i, leftCann - j,

                                    1 - boatAt, now.cost + 1)) {

                                queue.add(new Status(leftMiss - i,

                                        leftCann - j, 1 - boatAt, -1, now.cost

                                                + 1

                                                + calF(leftMiss - i, leftCann

                                                        - j, 1 - boatAt)));

                                dp[leftMiss - i][leftCann - j][1 - boatAt] = now.cost + 1;

                                pre[leftMiss - i][leftCann - j][1 - boatAt] = new Transport(

                                        i, j, boatAt);

                            }

                        }

                    }

                }

            } else {

                int rightMiss = numOfMiss - leftMiss;

                int rightCann = numOfCann - leftCann;

                for (i = 0; i <= rightMiss && i <= capacity; ++i) {

                    for (j = 0; j <= rightCann && i + j <= capacity; ++j) {

                        if (i + j != 0) {

                            if (checkValidSmaller(leftMiss + i, leftCann + j,

                                    1 - boatAt, now.cost + 1)) {

                                queue.add(new Status(leftMiss + i,

                                        leftCann + j, 1 - boatAt, -1, now.cost

                                                + 1

                                                + calF(leftMiss + i, leftCann

                                                        + j, 1 - boatAt)));

                                dp[leftMiss + i][leftCann + j][1 - boatAt] = now.cost + 1;

                                pre[leftMiss + i][leftCann + j][1 - boatAt] = new Transport(

                                        i, j, boatAt);

                            }

                        }

                    }

                }

            }

        }

        if (!solution)

            System.out.println("²»´æÔÚ½â!";



        queue.clear();



        System.out.println("Time elapsed: "

                + (System.currentTimeMillis() - begin) + " minisecs.\n";



    }



    private int calF(int numOfMiss, int numOfCann, int boatAt) {

        return (numOfMiss + numOfCann + boatAt - 1) / (capacity - 1);

}
2Â¥2010-08-15 13:44:38
ÒÑÔÄ   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ wangcl8659 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] ²ÄÁϹ¤³Ìר˶µ÷¼Á +5 204818@lcx 2026-03-17 6/300 2026-03-18 22:55 by 204818@lcx
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á +7 ÄÝÄÝninicgb 2026-03-15 11/550 2026-03-18 19:48 by macy2011
[¿¼ÑÐ] 266Çóµ÷¼Á +5 ÑôÑôÍÛÈû 2026-03-14 9/450 2026-03-18 15:05 by stone_128
[¿¼ÑÐ] 298-Ò»Ö¾Ô¸Öйúũҵ´óѧ-Çóµ÷¼Á +7 ÊÖ»úÓû§ 2026-03-17 7/350 2026-03-18 14:34 by vgtyfty
[¿¼ÑÐ] ÉúÎïѧ071000 329·ÖÇóµ÷¼Á +3 ÎÒ°®ÉúÎïÉúÎﰮΠ2026-03-17 3/150 2026-03-18 10:12 by macy2011
[¿¼ÑÐ] 268Çóµ÷¼Á +6 ¼òµ¥µã0 2026-03-17 6/300 2026-03-18 09:04 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] 301Çóµ÷¼Á +4 A_JiXing 2026-03-16 4/200 2026-03-17 17:32 by ruiyingmiao
[˶²©¼ÒÔ°] ºþ±±¹¤Òµ´óѧ ÉúÃü¿ÆÑ§Ó뽡¿µÑ§Ôº-¿ÎÌâ×éÕÐÊÕ2026¼¶Ê³Æ·/ÉúÎï·½Ïò˶ʿ +3 1ϲ´º8 2026-03-17 5/250 2026-03-17 17:18 by ber´¨cool×Ó
[¿¼ÑÐ] 332Çóµ÷¼Á +6 Zz°æ 2026-03-13 6/300 2026-03-17 17:03 by ruiyingmiao
[¿¼ÑÐ] Ò»Ö¾Ô¸ÄϾ©´óѧ£¬080500²ÄÁÏ¿ÆÑ§Ó빤³Ì£¬µ÷¼Á +4 Jy? 2026-03-16 4/200 2026-03-17 11:02 by gaoqiong
[¿¼ÑÐ] ¿¼Ñе÷¼Á +3 ä¿ya_~ 2026-03-17 5/250 2026-03-17 09:25 by Winj1e
[¿¼ÑÐ] 304Çóµ÷¼Á +3 ÂüÊâ2266 2026-03-14 3/150 2026-03-16 16:39 by houyaoxu
[¿¼ÑÐ] 326Çóµ÷¼Á +3 mlpqaz03 2026-03-15 3/150 2026-03-16 07:33 by Iveryant
[¿¼ÑÐ] ÇóÀÏʦÊÕÁôµ÷¼Á +4 jiang½ª66 2026-03-14 5/250 2026-03-15 20:11 by Winj1e
[¿¼ÑÐ] ±¾¿ÆÄϾ©´óѧһ־Ը´¨´óҩѧ327 +3 ÂóÌï¸ûÕß 2026-03-14 3/150 2026-03-14 20:04 by ÍâÐÇÎÄÃ÷
[¿¼ÑÐ] ¸´ÊÔµ÷¼Á +4 z1z2z3879 2026-03-14 5/250 2026-03-14 16:30 by JourneyLucky
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤£¨0856£©304ÇóBÇøµ÷¼Á +6 Çñgl 2026-03-12 7/350 2026-03-13 23:24 by Çñgl
[¿¼ÑÐ] 26µ÷¼Á/²ÄÁÏ¿ÆÑ§Ó빤³Ì/×Ü·Ö295/ÇóÊÕÁô +9 2026µ÷¼ÁÏÀ 2026-03-12 9/450 2026-03-13 20:46 by 18595523086
[¿¼ÑÐ] 070303Ò»Ö¾Ô¸Î÷±±´óѧѧ˶310ÕÒµ÷¼Á +3 dÈçÔ¸Éϰ¶ 2026-03-13 3/150 2026-03-13 10:43 by houyaoxu
[¿¼ÑÐ] 081200-11408-276ѧ˶Çóµ÷¼Á +3 ´Þwj 2026-03-12 4/200 2026-03-12 19:33 by Çóµ÷¼Ázz
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û