¡¶Ëã·¨Éè¼ÆÓë·ÖÎö¡· –ÍõÏþ¶«
ÌâÐÍÐðÊö£º
ÔÚÒ»¿éÏß·°åµÄÉÏ¡¢ÏÂ2¶Ë¸÷×ÔÓÐn¸ö½ÓÏßÍ·¡£ÒÀ¾ÝµçÔ´µç·Éè¼Æ·½°¸£¬¹æ¶¨ÓÃÊäµçÏߣ¨i£¬a£¨i£©£©½«ÉÏ·½½ÓÏßÍ·ÓëÏ·½½ÓÏßÍ·Ïà½Ó£¬ÔÚÆäÖÐa£¨i£©±íÃ÷ÉϽڵãiÏàÆ¥ÅäµÄÏò½ÚµãµÄÖµ¡£ÈçÏÂͼËùʾ£º
ÌâÐ͹涨ÊÇÔÚ¸ø³öµÄÁ¬ÏßÖУ¬Ñ¡Ôñ²»½»µãÁ¬ÏߵĽϴó·Ç¿Õ×Ó¼¯£¬¼´²»½»µãÁ¬ÏߵĽϴóÊý¶î¡£²¢°Ñ½Ï´ó²»½»µã·Ç¿Õ×Ó¼¯µÄ×´¿ö¸øÀý¾Ù½â¾ö°¡¡£
½âÌâ˼·£º
×îÏÈÓÃa£Ûi£Ý¶þάÊý×é±íÃ÷ÓëÉϱ߶ÔÓ¦µÄµãÏà½ÓÏßµÄϱߵĵ㣬ÔÙÓÃset£Ûi£Ý£Ûj£Ý±íÃ÷ÉϱßÁ¬½ÓµãiÓëϱßÁ¬½ÓµãjÁ¬ÏßµÄ×ó²à£¨°üº¬i jÁ¬Ïߣ©µÄ×î¸ß²»½»µãÁ¬ÏßµÄÊýÁ¿¡£
Òò´Ë¾Í»áÓй«Ê½¼ÆË㣺
max£¨set£Ûi-1£Ý£Ûj£Ý£¬ set£Ûi£Ý£Ûj-1£Ý£©; j £¡= a£Ûi£Ý
set£¨i£¬j£© =
set£Ûi-1£Ý£Ûj-1£Ý 1; j == a£Ûi£Ý
Ëæºó¾Í¿ÉÒÔ¶Ôÿһ¸öi£¬¶¼¶ÔÒò´ËµÄjÇóÒ»±é¡£ÄÇÑù¾Í¿ÉÒԵõ½½Y¹ûÂð£¬set£Ûn£Ý£Ûn£Ý¼´´ó¼ÒÐèÒªµÄ½Y¹û¡£
×îÖÕ¸ù¾Ý»ØË·°ÑÊý¾Ýµ¼³ö³öÈ¥¡£
±àÂëÍê³É£º
#include ¡¶stdio.h¡·
#define MAX£¨a£¬b£© £¨£¨a£© ¡· £¨b£© £¿ £¨a£© £º £¨b£©£©
void circut£¨int a£Û£Ý£¬int set£Û£Ý£Û11£Ý£¬int n£©;
void back_track£¨int i£¬int j£¬int set£Û£Ý£Û11£Ý£©;
int main£¨£©
{
int a£Û£Ý = {0£¬8£¬7£¬4£¬2£¬5£¬1£¬9£¬3£¬10£¬6};
int set£Û11£Ý£Û11£Ý;
circut£¨a£¬set£¬10£©;
printf£¨¡°max set£º %d \\n¡±£¬set£Û10£Ý£Û10£Ý£©;
back_track£¨10£¬10£¬set£©;
printf£¨¡°\\n¡±£©;
return 0;
}
void circut£¨int a£Û£Ý£¬int set£Û£Ý£Û11£Ý£¬int n£©
{
int i£¬j;
for £¨i = 0; i ¡¶ n; i £©
{
set£Ûi£Ý£Û0£Ý = 0;
set£Û0£Ý£Ûi£Ý = 0;
}
for £¨i = 1; i ¡¶= n; i £©
{
for £¨j = 1; j ¡¶= n; j £©
{
if £¨a£Ûi£Ý £¡= j£©
set£Ûi£Ý£Ûj£Ý = MAX£¨set£Ûi-1£Ý£Ûj£Ý£¬set£Ûi£Ý£Ûj-1£Ý£©;
else
set£Ûi£Ý£Ûj£Ý = set£Ûi-1£Ý£Ûj-1£Ý 1;
}
}
}
void back_track£¨int i£¬int j£¬int set£Û£Ý£Û11£Ý£©
{
if £¨i == 0£©
return;
if £¨set£Ûi£Ý£Ûj£Ý == set£Ûi-1£Ý£Ûj£Ý£©
back_track£¨i-1£¬j£¬set£©;
else if £¨set£Ûi£Ý£Ûj£Ý == set£Ûi£Ý£Ûj-1£Ý£©
back_track£¨i£¬j-1£¬set£©;
else
{
back_track£¨i-1£¬j-1£¬set£©;
printf£¨¡°£¨%d£¬%d£© ¡±£¬i£¬j£©;
}
}
¸ÃÎÄÕÂÄÚÈÝÌá¸ßÉ¢²¥Ð¼¼ÊõÓ¦ÓÃÐÂÎÅ×ÊѶ£¬ºÜÓпÉÄÜÓÐת½Ø/ÒýÈëÖ®×´¿ö£¬ÈôÓÐÇÖȨÐÐΪÇëÁªÂçɾµô¡£
ÉÏһƪ: °¸Àý·ÖÎö£ºµç·²¼ÏßÎÊÌâ