| ²é¿´: 457 | »Ø¸´: 1 | |||
wangcl8659½ð³æ (СÓÐÃûÆø)
|
[½»Á÷]
¡¾ÇóÖú¡¿Ê³ÈËħ¹ý³Ì³ÌÐò
|
|
ʳÈËħ¹ýºÓÎÊÌâ £¨1£©Èý¸ö´«½ÌÊ¿¡¢Èý¸öʳÈËħºÍÒ»Ìõ´¬ÔÚºÓµÄ×ó°¶ £¨2£©´«½ÌÊ¿ºÍʳÈËħ¶¼ÄܳŴ¬£¬´¬µÄ×î´ó×¼ÔØÁ¿Îª2£»¶øÇÒµ±Ê³ÈËħ±È´«½ÌÊ¿¶àʱ£¬Ê³ÈËħ»áÉ˺¦´«½ÌÊ¿ £¨3£©Ñ°ÕÒÒ»Öֶɺӷ½°¸ ×îºÃÊÇJavaÓïÑÔ£¬ÆäËûÒ²¿ÉÒÔ¡£ |
» ²ÂÄãϲ»¶
271²ÄÁϹ¤³ÌÇóµ÷¼Á
ÒѾÓÐ5È˻ظ´
281Çóµ÷¼Á£¨0805£©
ÒѾÓÐ16È˻ظ´
304Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
²ÄÁϹ¤³Ìר˶µ÷¼Á
ÒѾÓÐ6È˻ظ´
Ò»Ö¾Ô¸Ìì´ó²ÄÁÏÓ뻯¹¤£¨085600£©×Ü·Ö338
ÒѾÓÐ4È˻ظ´
085700×ÊÔ´Óë»·¾³308Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
Çó²ÄÁϵ÷¼Á
ÒѾÓÐ8È˻ظ´
294Çóµ÷¼Á²ÄÁÏÓ뻯¹¤×¨Ë¶
ÒѾÓÐ5È˻ظ´
Ò»Ö¾Ô¸»ªÖпƼ¼´óѧ£¬080502£¬354·ÖÇóµ÷¼Á
ÒѾÓÐ4È˻ظ´
Ò»Ö¾Ô¸¼ªÁÖ´óѧ²ÄÁÏѧ˶321Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
wangcl8659
½ð³æ (СÓÐÃûÆø)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ½ð±Ò: 1830.5
- É¢½ð: 10
- ºì»¨: 1
- Ìû×Ó: 61
- ÔÚÏß: 39Сʱ
- ³æºÅ: 711045
- ×¢²á: 2009-02-28
- רҵ: ֪ʶ¹ÜÀí
ÓàÔó³É:±¾°æ²»¹ÄÀøÎ´¾Ë¼¿¼µÄ×÷ÒµÇóÖú£¡ÍË»¹½ð±Ò£¬¹Ø±Õ´ËÌû£¡ 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.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













»Ø¸´´ËÂ¥
;