²é¿´: 1613  |  »Ø¸´: 8

hsfang

гæ (³õÈëÎÄ̳)

[ÇóÖú] ¹ØÓÚC++Öнá¹ûÊä³öµÄÎÊÌâ ÒÑÓÐ2È˲ÎÓë

¸÷λ´óÏÀ£¬ÎÒÓÐÒ»¶Î³ÌÐò´úÂë¿ÉÔËÐУ¬µ«Êǽá¹û¾ÍÊÇÒ»¸öºÚÉ«¿òÖÐÒ»ÉÁ¶ø¹ý£¡ÎÒÏ£Íû°ÑÕâÒ»¹ý³ÌÊý¾Ý·´Ó¦µ½Ò»¸öÎĵµÖУ¬ÔõôÑù²Å¿ÉÒÔ×öµ½ÄØ£¿Ð»Ð»
ÈçϳÌÐò£º
#include <iostream>
using namespace std;

struct Node{
        char a[3][3];                        //±íʾ״̬µÄÊý×é
        Node * pFather;                        //Ö¸Ïò½ÚµãµÄ¸¸½Úµã
        Node * pNext;                        //ÓÃÓÚ½¨Á¢Á´±í
        int i0;                                        //½ÚµãÖÐ'0'µÄλÖÃx×ø±ê
        int j0;                                        //½ÚµãÖÐ'0'µÄλÖÃy×ø±ê
};

struct List {
        Node * Head;                //¶ÓÁÐÍ·Ö¸Õë
        Node * Tail;                //¶ÓÁÐβָÕë
};

//³õʼ»¯List
//²ÎÊý£ºÖ¸ÏòlistµÄÖ¸Õë
//·µ»ØÖµ£ºÎÞ
void InitList(List * pList)
{
        pList->Head = NULL;
        pList->Tail = NULL;
}

//½«Ò»¸ö½ÚµãpNodeÈë¶Ó
//²ÎÊý£º¶ÓÁÐÖ¸ÕëpList£»½ÚµãÖ¸ÕëpNode
//·µ»ØÖµ£ºÎÞ
void InList(List * pList,Node * pNode){
        if (!pList->Head)
        {
                pList->Head = pNode;
                pList->Tail = pNode;
        }
        else
        {
                pList->Tail->pNext = pNode;
                pList->Tail = pNode;
        }
}

//½«¶ÓÁеĵÚÒ»¸ö½Úµã³ö¶Ó
//²ÎÊý£º¶ÓÁÐÖ¸ÕëpList
//·µ»ØÖµ£º¶ÓÁÐΪ¿Õ£¬·µ»ØNULL£»¶ÓÁв»Îª¿Õ£¬Ö¸Ïò³ö¶Ó½ÚµãÖ¸Õë
Node * OutList(List * pList){
        Node * temp=NULL;
        if (!pList->Head)
        {
                return NULL;
               
        }
        else
        {
               
                temp = pList->Head;
                if(pList->Head == pList->Tail)                //Ö»ÓÐÒ»¸ö½Úµã
                {
                        pList->Head = NULL;
                        pList->Tail = NULL;               
                }
                else
                {
                        pList->Head =temp->pNext;                //²»Ö¹Ò»¸ö½Úµã
                }
                return temp;
        }
}

//ÅжÏÁ½¸ö½ÚµãµÄ״̬ÊÇ·ñÒ»ÖÂ
//²ÎÊý£ºÁ½¸öÖ¸Ïò½ÚµãµÄÖ¸ÕëpNode1¡¢pNode2
//·µ»ØÖµ£ºÒ»ÖÂtrue£»²»Ò»ÖÂfalse
bool IsEqual(Node * pNode1,Node * pNode2)
{
        if(!pNode1 || !pNode2){
                return true;       
        }
        for(int i = 0;i < 3;i++)
        {
                for (int j = 0;j < 3;j++)
                {
                        if(!pNode1->a || !pNode2->a)
                        {
                                return true;       
                        }
                        if (pNode1->a[j] != pNode2->a[j])
                        {
                                return false;
                        }
                }
        }
        return true;
}


//¿½±´Ò»¸ö½ÚµãµÄ״̬µ½ÐµĽڵã
//²ÎÊý£ºNodeµÄÖ¸Õ룺pNew£¬pOld
//·µ»ØÖµ£ºÎÞ
void CopyNode(Node * pNew,Node * pOld)
{
        for(int i = 0;i < 3;i++)
        {
                for (int j = 0;j < 3;j++)
                {
                        pNew->a[j] = pOld->a[j];
                }
        }
}

//¸ø¶¨Ò»¸ö½Úµã£¬À©Õ¹³ö¸Ã½ÚµãµÄËùÓÐ×ӽڵ㣬·µ»ØÒ»¸ö±£´æËùÓнڵãµÄList
//²ÎÊý;Ö¸ÏòÖ¸Õë½ÚµãµÄÖ¸Õë
//·µ»ØÖµ£ºListÖ¸Õë
List * ExpandSub(Node * pNode){
        //±£´æÒƶ¯ºó,'0'ÔªËØµÄλÖÃ×ø±ê
        int i = 0;                       
        int j = 0;

        //ÉùÃ÷±£´æËùÓнڵãµÄList
        List * pSubList;
        pSubList = new List;
        InitList(pSubList);

        for (int iAdd = -1;iAdd <= 1;iAdd++)
        {
                for (int jAdd = -1;jAdd <= 1;jAdd++)
                {
                        //ÅųýÔöÁ¿£¨-1£¬-1£©¡¢£¨-1,1£©¡¢£¨0,0£©¡¢£¨1£¬-1£©¡¢£¨1,1£©
                        if(iAdd == 0 &&jAdd == 0)
                        {
                                continue;
                        }
                        if(iAdd != 0 &&jAdd != 0)
                        {
                                continue;
                        }
                        //¼ÆËãÒÆ¶¯ºóµÄ'0'ÔªËØµÄλÖÃ×ø±ê
                        i = pNode->i0 + iAdd;
                        j = pNode->j0 + jAdd;
                        //ÅųýÊý×éÔ½½çÇé¿ö
                        if (i < 0 || j < 0 || i > 2 || j > 2)
                        {
                                continue;
                        }
                        //×Ó½ÚµãÖ¸Õë
                        Node * pSub;
                        pSub = new Node;

                        //³õʼ»¯×Ó½Úµã
                        pSub->i0 = i;
                        pSub->j0 = j;
                        pSub->pFather = pNode;
                        pSub->pNext = NULL;
                       
                        CopyNode(pSub,pNode);

                        pSub->a[pNode->i0][pNode->j0] = pSub->a[j];
                        pSub->a[j] = '0';

                        //×Ó½ÚµãÈë¶Ó
                        InList(pSubList,pSub);
                }
        }
        return pSubList;
}

//´òӡij¸ö½Úµã
//²ÎÊý£º½ÚµãÖ¸Õë
//·µ»ØÖµ£ºÎÞ
void printNode(Node * pNode)
{
        cout<<"-----------------\n";
        for(int i = 0;i < 3;i++)
        {               
                for (int j = 0;j < 3;j++)
                {
                        cout<<pNode->a[j]<<"\t";
                }
                cout<<endl;
        }
        cout<<"-----------------\n";
}

//´òÓ¡½á¹û
//²ÎÊý£ºNodeÖ¸Õë
//·µ»ØÖµ£ºÎÞ
void printPath(Node * pResult)
{
        Node * temp;
        temp = pResult;
        while (temp)
        {
                printNode(temp);
                temp = temp->pFather;
        }
}

//ËÑË÷ij¸öListÖÐÊÇ·ñ³öÏֺͽڵãpNode״̬һÖµĽڵã
//²ÎÊý£ºNodeÖ¸Õ룬½ÚµãÖ¸ÕëpNode
//·µ»ØÖµ£º³öÏÖtrue£¬Ã»ÓгöÏÖfalse
bool IsAppeared(Node * pStart,Node * pNode)
{
        Node * temp ;
        temp =  pStart;
        while (temp)
        {
                if(IsEqual(temp,pNode))
                {
                        return true;
                }
                temp = temp->pNext;
        }
        return false;
}

//×Ó½ÚµãÈë¶Ó
//²ÎÊý£ºNode * pStart,List * £¬Node *£»
//·µ»ØÖµ£º ÎÞ
void SubNodeInList(Node * pStart,List * list,Node * pOut)
{
        Node * temp;
        Node * temp1;
        //±£´æ×Ó½Úµã¶ÓÁÐ
        List * pSubList = NULL;
        pSubList = new List;
        InitList(pSubList);

        pSubList = ExpandSub(pOut);


        temp = OutList(pSubList);//È¡×Ó½Úµã
        while (temp)
        {
                if(IsAppeared(pStart,temp))
                {
                        temp1 = temp;
                        temp = temp->pNext;
                        delete temp1;
                }
                else
                {
                        Node * tempSwap =NULL;
                        tempSwap = new Node;
                        CopyNode(tempSwap,temp);
                        tempSwap->i0 = temp->i0;
                        tempSwap->j0 = temp->j0;
                        tempSwap->pFather = temp->pFather;
                        tempSwap->pNext = NULL;

                        InList(list,tempSwap);
                        temp = temp->pNext;
                }
        }
}

//ËÑË÷º¯Êý
//²ÎÊý£ºÔ­Ê¼½ÚµãÖ¸ÕëpSrc£¬Ä¿µÄ½ÚµãÖ¸ÕëpDes
//ÎÞ½á¹û£¬·µ»ØNULL£»Óнá¹û£¬·µ»Ø±£´æÂ·¾¶µÄListÖ¸Õë
Node * Search(Node * pSrc,Node * pDes)
{
        //±£´æ¶ÓÁÐÍ·½Úµã
        Node * pStart = pSrc;

        //ÓÃÀ´±£´æ½á¹û
         Node * pResult = NULL;


         //ÓÃÀ´±éÀú
         List * list = NULL;
         list = new List;
         InitList(list);
         
         //Èë¶Ó
         InList(list,pSrc);

         int i = 1;
         bool flagxx = false;

         Node * pOut = NULL;
         pOut = OutList(list);
         Node * s;
         while (pOut)
         {
                 SubNodeInList(pStart,list,pOut);
                 pOut = OutList(list);
                 if(!flagxx)
                 {
                         pSrc->pNext=pOut;
                         flagxx = true;
                 }                 

                 s = pStart;

                 while(s)
                 {
                         if(IsEqual(s,pDes))
                         {
                                 pResult = s;
                                 return pResult;
                         }
                         s=s->pNext;
                 }
                 //cout<<"\n\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n\n";
         }
         return NULL;
}
int main()
{
        Node temp = {{{'1','2','3'},{'4','0','6'},{'7','5','8'}},NULL,NULL,1,1};        //ԭʼ״̬
        //Ö¸Ïòԭʼ״̬µÄÖ¸Õë
        Node * pSrc;
        pSrc = &temp;

        Node TEMP = {{{'1','2','3'},{'4','5','6'},{'7','8','0'}},NULL,NULL,2,2};        //Ä¿µÄ״̬z
        //Ö¸ÏòÄ¿µÄ״̬µÄÖ¸Õë
        Node * pDes;
        pDes = &TEMP;

        Node * pResult = NULL;
        pResult = Search(pSrc,pDes);
        if (!pResult)
        {
                cout<<"ÎÊÌâÎ޽⣡";
        }
        else
        {
                printPath(pResult);
        }


        /*²âÊÔº¯ÊýList * ExpandSub(Node * pNode)
        List * p;
        p = new List;
        InitList(p);
        p = ExpandSub(pSrc);

        printList(p);
        */

        system("pause";
        return 0;
}

[ Last edited by hsfang on 2014-3-18 at 17:01 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:

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

liqizuiyang

ľ³æ (ÖøÃûдÊÖ)

ÔÚUnixϵͳÏÂÔËÐУ¬½«½á¹ûÖØ¶¨Ïòµ½Îļþ¡£

./foobar.x > output
2Â¥2014-03-18 19:18:29
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ifound

гæ (³õÈëÎÄ̳)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï
¸Ðл²ÎÓ룬ӦÖúÖ¸Êý +1
hsfang: ½ð±Ò+1, ¡ïÓаïÖú, »¹ÊÇллÄã 2014-03-22 11:29:50
Â¥Ö÷µÄ³ÌÐòÊÇÔÚwindows ÏÂÔËÐеİɣ¬ ÔÚmainº¯ÊýµÄ×îºó¼ÓÉÏÒ»¸öµÈ´ýÊäÈëµÄ£¬ºÚ¿ò¾Í²»»áÒ»ÉÁ¶ø¹ýÁË£¬±ÈÈç  
int a;cin>>a;
3Â¥2014-03-19 11:01:52
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

houqi1993

гæ (³õÈëÎÄ̳)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï
¸Ðл²ÎÓ룬ӦÖúÖ¸Êý +1
hsfang: ½ð±Ò+1, ¡ïÓаïÖú, Õâ¸öÎÒ»¹Ã»ÊÔ³ö£¬»¹ÊÇллÄã 2014-03-22 11:30:22
Ïë±£Áô½á¹û£¬¿ÉÒÔÔÚÃüÁîÐÐÏÂÔËÐУ¬²¢½«½á¹ûÖØ¶¨Ïòµ½ÎļþÖУ¬ÔÚexeĿ¼Ï£¬Ö´ÐУº
XXX.exe > result.txt
¼´¿É¡£
4Â¥2014-03-21 15:19:35
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

houqi1993

гæ (³õÈëÎÄ̳)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï ¡ï ¡ï
hsfang: ½ð±Ò+3, ¡ï¡ï¡ïºÜÓаïÖú, ¸ã¶¨ÁË£¬Ð»Ð» 2014-03-22 11:30:44
Èç¹ûÊÇÏë¿´µ½½á¹û£¬¿ÉÒÔÀûÓÃSystem(pause);
»òÕßÒ²¿ÉÒÔÀûÓà getchar()
Ï£Íû¿ÉÒÔ°ïµ½Äã¡£
5Â¥2014-03-21 15:20:37
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

hsfang

гæ (³õÈëÎÄ̳)

ÒýÓûØÌû:
2Â¥: Originally posted by liqizuiyang at 2014-03-18 19:18:29
ÔÚUnixϵͳÏÂÔËÐУ¬½«½á¹ûÖØ¶¨Ïòµ½Îļþ¡£

./foobar.x > output

ÎÒÊÇÐÂÊÖ£¬ÏÈÊÔÊÔ£¡Ð»Ð»
6Â¥2014-03-22 09:32:26
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

hsfang

гæ (³õÈëÎÄ̳)

ÒýÓûØÌû:
5Â¥: Originally posted by houqi1993 at 2014-03-21 15:20:37
Èç¹ûÊÇÏë¿´µ½½á¹û£¬¿ÉÒÔÀûÓÃSystem(pause);
»òÕßÒ²¿ÉÒÔÀûÓà getchar()
Ï£Íû¿ÉÒÔ°ïµ½Äã¡£

ÎÒÊDzËÄñ£¬²»ÊìϤ£¡ÒªÊÔÊÔ£¬Ð»Ð»
7Â¥2014-03-22 09:33:42
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

hsfang

гæ (³õÈëÎÄ̳)

ÒýÓûØÌû:
2Â¥: Originally posted by liqizuiyang at 2014-03-18 19:18:29
ÔÚUnixϵͳÏÂÔËÐУ¬½«½á¹ûÖØ¶¨Ïòµ½Îļþ¡£

./foobar.x > output

windows ÏÂ
8Â¥2014-03-22 09:46:19
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

hsfang

гæ (³õÈëÎÄ̳)

ÎÊÌâÒѽâ¾ö£¬Ð»Ð»¸÷λ´óÏÀ
9Â¥2014-03-22 11:28:52
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ hsfang µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 326Çóµ÷¼Á +5 ŵ±´¶û»¯Ñ§½±êéê 2026-03-15 8/400 2026-03-21 19:33 by ColorlessPI
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á +4 ÄÝÄÝninicgb 2026-03-21 4/200 2026-03-21 18:39 by ѧԱ8dgXkO
[¿¼ÑÐ] 317Çóµ÷¼Á +9 Éê×ÓÉêÉê 2026-03-19 15/750 2026-03-21 17:31 by ѧԱ8dgXkO
[¿¼ÑÐ] 336Çóµ÷¼Á +5 rmc8866 2026-03-21 5/250 2026-03-21 17:24 by ѧԱ8dgXkO
[¿¼ÑÐ] 085601µ÷¼Á 358·Ö +3 zzzzggh 2026-03-20 4/200 2026-03-21 10:21 by luoyongfeng
[¿¼ÑÐ] »¯Ñ§Çóµ÷¼Á +4 ÁÙÔó¾³llllll 2026-03-17 5/250 2026-03-21 02:23 by JourneyLucky
[¿¼ÑÐ] 296Çóµ÷¼Á +6 www_q 2026-03-18 10/500 2026-03-20 23:56 by JourneyLucky
[¿¼ÑÐ] 274Çóµ÷¼Á +10 S.H1 2026-03-18 10/500 2026-03-20 23:51 by JourneyLucky
[¿¼ÑÐ] 287Çóµ÷¼Á +7 ³¿»èÏßÓëÐǺ£ 2026-03-19 8/400 2026-03-20 22:19 by JourneyLucky
[¿¼ÑÐ] ±±¿Æ281ѧ˶²ÄÁÏÇóµ÷¼Á +5 tcxiaoxx 2026-03-20 5/250 2026-03-20 21:35 by laoshidan
[¿¼ÑÐ] Çóµ÷¼ÁÒ»Ö¾Ô¸ÄϾ©º½¿Õº½Ìì´óѧ289·Ö +3 @taotao 2026-03-19 3/150 2026-03-20 21:34 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸¼ªÁÖ´óѧ²ÄÁÏѧ˶321Çóµ÷¼Á +11 Ymlll 2026-03-18 15/750 2026-03-20 19:40 by ¶¡¶¡*
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤×¨Ë¶µ÷¼Á +7 heming3743 2026-03-16 7/350 2026-03-20 19:31 by zhukairuo
[¿¼ÑÐ] 286Çóµ÷¼Á +6 lemonzzn 2026-03-16 10/500 2026-03-19 14:31 by lemonzzn
[¿¼ÑÐ] ²ÄÁÏ¿¼Ñе÷¼Á +3 xwt¡£ 2026-03-19 3/150 2026-03-19 11:22 by wãåÑôw
[¿¼ÑÐ] ±¾¿ÆÖ£ÖÝ´óѧÎïÀíѧԺ£¬Ò»Ö¾Ô¸»ª¿Æ070200ѧ˶£¬346Çóµ÷¼Á +4 ÎÒ²»ÊÇÒ»¸ù´Ð 2026-03-18 4/200 2026-03-19 09:11 by ¸¡ÔÆ166
[¿¼ÑÐ] 344Çóµ÷¼Á +6 knight344 2026-03-16 7/350 2026-03-18 20:13 by walc
[¿¼ÑÐ] 312Çóµ÷¼Á +8 İå·Ï£ 2026-03-16 9/450 2026-03-18 12:39 by Linda Hu
[¿¼ÑÐ] 0703»¯Ñ§336·ÖÇóµ÷¼Á +6 zbzihdhd 2026-03-15 7/350 2026-03-18 09:53 by zhukairuo
[¿¼ÑÐ] »úеר˶325£¬Ñ°ÕÒµ÷¼ÁԺУ +3 y9999 2026-03-15 5/250 2026-03-16 19:58 by y9999
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û