八皇后(含源程序反汇编代码) -- 深度递归搜索&回溯

来源:互联网 发布:找工作软件软件靠谱 编辑:程序博客网 时间:2024/05/18 22:09

几年前写过没有留档,想往博客腾一份so敲了一次。几年过去了,对于八皇后问题感觉还是挺容易解决的。贴一张运行结果图再上代码(92为八皇后问题的解决方法数),代码中的注释还是非常清晰的:




code:

#include <stdio.h>#include <windows.h>// 用于统计解决方案数int g_nCount=0;/***********************************************************//*    函数功能:检查当前坐标是否符合要求                   *//*    参数1:   行号                                       *//*    参数2:   列号                                       *//*    返回值:  0表示不符合;1表示符合                     *//***********************************************************/int funcCheck(int row, int line, int (*Q)[8]){    int i,j;    // 检查当前行    for ( j=0; j<8; j++)    {        if( j==line )            continue;        if( Q[row][j]==1 )            return 0;    }    // 检查当前列    for ( i=0; i<8; i++)    {        if( i==row )            continue;        if( Q[i][line]==1 )            return 0;    }    // 检查左上对角线    for ( i=row-1,j=line-1; i>=0&&j>=0; i--,j-- )    {        if( Q[i][j]==1 )            return 0;    }    // 检查左下对角线    for ( i=row+1,j=line-1; i<8&&j>=0; i++,j-- )    {        if( Q[i][j]==1 )            return 0;    }    // 检查右上对角线    for ( i=row-1,j=line+1; i>=0&&j<8; i--,j++ )    {        if( Q[i][j]==1 )            return 0;    }    // 检查右下对角线    for ( i=row+1,j=line-1; i<8&&j<8; i++,j++ )    {        if( Q[i][j]==1 )            return 0;    }    return 1;}/***********************************************************//*    函数功能:计算并打印符合要求的方案                   *//*    参数1:   传入此次计算的行号                         *//*    参数2:   传入当前分析的棋盘状态                     *//*    返回值:  空                                         *//***********************************************************/void funcAnalyse(int row, int (*Q)[8]){    // 如果分析到第8行, 则表示寻到一种解决方案    if( row==8 )    {        g_nCount++;        printf("方案:\n");        for ( int i=0; i<8; i++ )        {            for ( int j=0; j<8; j++ )            {                printf("%d ", Q[i][j]);            }            printf("\n");        }        printf("\n");    }    else    {        // 分析当前行的所有列        for (int j=0; j<8; j++)        {            if( funcCheck(row, j, Q) )            {                // 当前点符合条件,标记,继续分析下一行                Q[row][j] = 1;                funcAnalyse(row+1, Q);                // 回溯,继续递归前的状态                Q[row][j] = 0;            }                                // 不符合条件则继续进行循环        }    }}int main(){    // 定义存储棋盘的二维数组, 初始化    int Queen[8][8];    for (int i=0; i<8; i++)    {        for (int j=0; j<8; j++)        {            Queen[i][j] = 0;        }    }    funcAnalyse(0, Queen);    printf("\n%d\n", g_nCount);    system("pause");    return 0;};


Debug版反汇编(Release版暂时不贴了):

int main(){00BD40E0 55                   push        ebp  00BD40E1 8B EC                mov         ebp,esp  00BD40E3 81 EC E4 01 00 00    sub         esp,1E4h  00BD40E9 53                   push        ebx  00BD40EA 56                   push        esi  00BD40EB 57                   push        edi  00BD40EC 8D BD 1C FE FF FF    lea         edi,[ebp-1E4h]  00BD40F2 B9 79 00 00 00       mov         ecx,79h  00BD40F7 B8 CC CC CC CC       mov         eax,0CCCCCCCCh  00BD40FC F3 AB                rep stos    dword ptr es:[edi]  00BD40FE A1 00 80 BD 00       mov         eax,dword ptr ds:[00BD8000h]  00BD4103 33 C5                xor         eax,ebp  00BD4105 89 45 FC             mov         dword ptr [ebp-4],eax      // 定义存储棋盘的二维数组, 初始化    int Queen[8][8];    for (int i=0; i<8; i++)00BD4108 C7 85 EC FE FF FF 00 00 00 00 mov         dword ptr [ebp-114h],0  00BD4112 EB 0F                jmp         main+43h (0BD4123h)  00BD4114 8B 85 EC FE FF FF    mov         eax,dword ptr [ebp-114h]  00BD411A 83 C0 01             add         eax,1  00BD411D 89 85 EC FE FF FF    mov         dword ptr [ebp-114h],eax  00BD4123 83 BD EC FE FF FF 08 cmp         dword ptr [ebp-114h],8  00BD412A 7D 45                jge         main+91h (0BD4171h)      {        for (int j=0; j<8; j++)00BD412C C7 85 E0 FE FF FF 00 00 00 00 mov         dword ptr [ebp-120h],0  00BD4136 EB 0F                jmp         main+67h (0BD4147h)  00BD4138 8B 85 E0 FE FF FF    mov         eax,dword ptr [ebp-120h]  00BD413E 83 C0 01             add         eax,1  00BD4141 89 85 E0 FE FF FF    mov         dword ptr [ebp-120h],eax  00BD4147 83 BD E0 FE FF FF 08 cmp         dword ptr [ebp-120h],8  00BD414E 7D 1F                jge         main+8Fh (0BD416Fh)          {            Queen[i][j] = 0;00BD4150 8B 85 EC FE FF FF    mov         eax,dword ptr [ebp-114h]  00BD4156 C1 E0 05             shl         eax,5  00BD4159 8D 8C 05 F8 FE FF FF lea         ecx,Queen[eax]  00BD4160 8B 95 E0 FE FF FF    mov         edx,dword ptr [ebp-120h]  00BD4166 C7 04 91 00 00 00 00 mov         dword ptr [ecx+edx*4],0          }00BD416D EB C9                jmp         main+58h (0BD4138h)      }00BD416F EB A3                jmp         main+34h (0BD4114h)      funcAnalyse(0, Queen);00BD4171 8D 85 F8 FE FF FF    lea         eax,[Queen]  00BD4177 50                   push        eax  00BD4178 6A 00                push        0  00BD417A E8 84 D0 FF FF       call        funcAnalyse (0BD1203h)  00BD417F 83 C4 08             add         esp,8      printf("\n%d\n", g_nCount);00BD4182 8B F4                mov         esi,esp  00BD4184 A1 30 81 BD 00       mov         eax,dword ptr ds:[00BD8130h]  00BD4189 50                   push        eax      printf("\n%d\n", g_nCount);00BD418A 68 6C 58 BD 00       push        0BD586Ch  00BD418F FF 15 D8 92 BD 00    call        dword ptr ds:[0BD92D8h]  00BD4195 83 C4 08             add         esp,8  00BD4198 3B F4                cmp         esi,esp  00BD419A E8 B5 CF FF FF       call        __RTC_CheckEsp (0BD1154h)      system("pause");00BD419F 8B F4                mov         esi,esp  00BD41A1 68 74 58 BD 00       push        0BD5874h  00BD41A6 FF 15 CC 92 BD 00    call        dword ptr ds:[0BD92CCh]  00BD41AC 83 C4 04             add         esp,4  00BD41AF 3B F4                cmp         esi,esp  00BD41B1 E8 9E CF FF FF       call        __RTC_CheckEsp (0BD1154h)      return 0;00BD41B6 33 C0                xor         eax,eax  };函数funcAnalyse:void funcAnalyse(int row, int (*Q)[8]){00BD3F80 55                   push        ebp  00BD3F81 8B EC                mov         ebp,esp  00BD3F83 81 EC E4 00 00 00    sub         esp,0E4h  00BD3F89 53                   push        ebx  00BD3F8A 56                   push        esi  00BD3F8B 57                   push        edi  00BD3F8C 8D BD 1C FF FF FF    lea         edi,[ebp-0E4h]  00BD3F92 B9 39 00 00 00       mov         ecx,39h  00BD3F97 B8 CC CC CC CC       mov         eax,0CCCCCCCCh  00BD3F9C F3 AB                rep stos    dword ptr es:[edi]      // 如果分析到第8行, 则表示寻到一种解决方案    if( row==8 )00BD3F9E 83 7D 08 08          cmp         dword ptr [row],8  00BD3FA2 0F 85 AF 00 00 00    jne         funcAnalyse+0D7h (0BD4057h)      {        g_nCount++;00BD3FA8 A1 30 81 BD 00       mov         eax,dword ptr ds:[00BD8130h]  00BD3FAD 83 C0 01             add         eax,1  00BD3FB0 A3 30 81 BD 00       mov         dword ptr ds:[00BD8130h],eax          printf("方案:\n");00BD3FB5 8B F4                mov         esi,esp  00BD3FB7 68 64 58 BD 00       push        0BD5864h  00BD3FBC FF 15 D8 92 BD 00    call        dword ptr ds:[0BD92D8h]  00BD3FC2 83 C4 04             add         esp,4  00BD3FC5 3B F4                cmp         esi,esp  00BD3FC7 E8 88 D1 FF FF       call        __RTC_CheckEsp (0BD1154h)          for ( int i=0; i<8; i++ )00BD3FCC C7 45 F8 00 00 00 00 mov         dword ptr [ebp-8],0  00BD3FD3 EB 09                jmp         funcAnalyse+5Eh (0BD3FDEh)  00BD3FD5 8B 45 F8             mov         eax,dword ptr [ebp-8]  00BD3FD8 83 C0 01             add         eax,1  00BD3FDB 89 45 F8             mov         dword ptr [ebp-8],eax  00BD3FDE 83 7D F8 08          cmp         dword ptr [ebp-8],8  00BD3FE2 7D 5A                jge         funcAnalyse+0BEh (0BD403Eh)          {            for ( int j=0; j<8; j++ )00BD3FE4 C7 45 EC 00 00 00 00 mov         dword ptr [ebp-14h],0  00BD3FEB EB 09                jmp         funcAnalyse+76h (0BD3FF6h)  00BD3FED 8B 45 EC             mov         eax,dword ptr [ebp-14h]  00BD3FF0 83 C0 01             add         eax,1  00BD3FF3 89 45 EC             mov         dword ptr [ebp-14h],eax  00BD3FF6 83 7D EC 08          cmp         dword ptr [ebp-14h],8  00BD3FFA 7D 29                jge         funcAnalyse+0A5h (0BD4025h)              {                printf("%d ", Q[i][j]);00BD3FFC 8B 45 F8             mov         eax,dword ptr [ebp-8]  00BD3FFF C1 E0 05             shl         eax,5  00BD4002 03 45 0C             add         eax,dword ptr [Q]  00BD4005 8B F4                mov         esi,esp  00BD4007 8B 4D EC             mov         ecx,dword ptr [ebp-14h]  00BD400A 8B 14 88             mov         edx,dword ptr [eax+ecx*4]  00BD400D 52                   push        edx  00BD400E 68 5C 58 BD 00       push        0BD585Ch  00BD4013 FF 15 D8 92 BD 00    call        dword ptr ds:[0BD92D8h]              {                printf("%d ", Q[i][j]);00BD4019 83 C4 08             add         esp,8  00BD401C 3B F4                cmp         esi,esp  00BD401E E8 31 D1 FF FF       call        __RTC_CheckEsp (0BD1154h)              }00BD4023 EB C8                jmp         funcAnalyse+6Dh (0BD3FEDh)              printf("\n");00BD4025 8B F4                mov         esi,esp  00BD4027 68 18 60 BD 00       push        0BD6018h  00BD402C FF 15 D8 92 BD 00    call        dword ptr ds:[0BD92D8h]  00BD4032 83 C4 04             add         esp,4  00BD4035 3B F4                cmp         esi,esp  00BD4037 E8 18 D1 FF FF       call        __RTC_CheckEsp (0BD1154h)          }00BD403C EB 97                jmp         funcAnalyse+55h (0BD3FD5h)          printf("\n");00BD403E 8B F4                mov         esi,esp  00BD4040 68 18 60 BD 00       push        0BD6018h  00BD4045 FF 15 D8 92 BD 00    call        dword ptr ds:[0BD92D8h]  00BD404B 83 C4 04             add         esp,4  00BD404E 3B F4                cmp         esi,esp  00BD4050 E8 FF D0 FF FF       call        __RTC_CheckEsp (0BD1154h)      }    else00BD4055 EB 6B                jmp         funcAnalyse+142h (0BD40C2h)      {        // 分析当前行的所有列        for (int j=0; j<8; j++)00BD4057 C7 45 E0 00 00 00 00 mov         dword ptr [ebp-20h],0  00BD405E EB 09                jmp         funcAnalyse+0E9h (0BD4069h)  00BD4060 8B 45 E0             mov         eax,dword ptr [ebp-20h]  00BD4063 83 C0 01             add         eax,1  00BD4066 89 45 E0             mov         dword ptr [ebp-20h],eax  00BD4069 83 7D E0 08          cmp         dword ptr [ebp-20h],8  00BD406D 7D 53                jge         funcAnalyse+142h (0BD40C2h)          {            if( funcCheck(row, j, Q) )00BD406F 8B 45 0C             mov         eax,dword ptr [Q]  00BD4072 50                   push        eax  00BD4073 8B 4D E0             mov         ecx,dword ptr [ebp-20h]  00BD4076 51                   push        ecx  00BD4077 8B 55 08             mov         edx,dword ptr [row]  00BD407A 52                   push        edx  00BD407B E8 7E D1 FF FF       call        funcCheck (0BD11FEh)  00BD4080 83 C4 0C             add         esp,0Ch  00BD4083 85 C0                test        eax,eax  00BD4085 74 39                je          funcAnalyse+140h (0BD40C0h)              {                // 当前点符合条件,标记,继续分析下一行                Q[row][j] = 1;00BD4087 8B 45 08             mov         eax,dword ptr [row]  00BD408A C1 E0 05             shl         eax,5  00BD408D 03 45 0C             add         eax,dword ptr [Q]  00BD4090 8B 4D E0             mov         ecx,dword ptr [ebp-20h]  00BD4093 C7 04 88 01 00 00 00 mov         dword ptr [eax+ecx*4],1                  funcAnalyse(row+1, Q);00BD409A 8B 45 0C             mov         eax,dword ptr [Q]  00BD409D 50                   push        eax  00BD409E 8B 4D 08             mov         ecx,dword ptr [row]  00BD40A1 83 C1 01             add         ecx,1  00BD40A4 51                   push        ecx  00BD40A5 E8 59 D1 FF FF       call        funcAnalyse (0BD1203h)  00BD40AA 83 C4 08             add         esp,8                  // 回溯,继续递归前的状态                Q[row][j] = 0;00BD40AD 8B 45 08             mov         eax,dword ptr [row]  00BD40B0 C1 E0 05             shl         eax,5  00BD40B3 03 45 0C             add         eax,dword ptr [Q]  00BD40B6 8B 4D E0             mov         ecx,dword ptr [ebp-20h]  00BD40B9 C7 04 88 00 00 00 00 mov         dword ptr [eax+ecx*4],0              }                                // 不符合条件则继续进行循环        }00BD40C0 EB 9E                jmp         funcAnalyse+0E0h (0BD4060h)      }}函数funcCheck:int funcCheck(int row, int line, int (*Q)[8]){00BD1500 55                   push        ebp  00BD1501 8B EC                mov         ebp,esp  00BD1503 81 EC D8 00 00 00    sub         esp,0D8h  00BD1509 53                   push        ebx  00BD150A 56                   push        esi  00BD150B 57                   push        edi  00BD150C 8D BD 28 FF FF FF    lea         edi,[ebp-0D8h]  00BD1512 B9 36 00 00 00       mov         ecx,36h  00BD1517 B8 CC CC CC CC       mov         eax,0CCCCCCCCh  00BD151C F3 AB                rep stos    dword ptr es:[edi]      int i,j;    // 检查当前行    for ( j=0; j<8; j++)00BD151E C7 45 EC 00 00 00 00 mov         dword ptr [j],0  00BD1525 EB 09                jmp         funcCheck+30h (0BD1530h)  00BD1527 8B 45 EC             mov         eax,dword ptr [j]  00BD152A 83 C0 01             add         eax,1  00BD152D 89 45 EC             mov         dword ptr [j],eax  00BD1530 83 7D EC 08          cmp         dword ptr [j],8  00BD1534 7D 25                jge         funcCheck+5Bh (0BD155Bh)      {        if( j==line )00BD1536 8B 45 EC             mov         eax,dword ptr [j]  00BD1539 3B 45 0C             cmp         eax,dword ptr [line]  00BD153C 75 02                jne         funcCheck+40h (0BD1540h)              continue;00BD153E EB E7                jmp         funcCheck+27h (0BD1527h)          if( Q[row][j]==1 )00BD1540 8B 45 08             mov         eax,dword ptr [row]  00BD1543 C1 E0 05             shl         eax,5  00BD1546 03 45 10             add         eax,dword ptr [Q]  00BD1549 8B 4D EC             mov         ecx,dword ptr [j]  00BD154C 83 3C 88 01          cmp         dword ptr [eax+ecx*4],1  00BD1550 75 07                jne         funcCheck+59h (0BD1559h)              return 0;00BD1552 33 C0                xor         eax,eax  00BD1554 E9 72 01 00 00       jmp         DFS+0BBh (0BD16CBh)      }00BD1559 EB CC                jmp         funcCheck+27h (0BD1527h)      // 检查当前列    for ( i=0; i<8; i++)00BD155B C7 45 F8 00 00 00 00 mov         dword ptr [i],0  00BD1562 EB 09                jmp         funcCheck+6Dh (0BD156Dh)  00BD1564 8B 45 F8             mov         eax,dword ptr [i]  00BD1567 83 C0 01             add         eax,1  00BD156A 89 45 F8             mov         dword ptr [i],eax  00BD156D 83 7D F8 08          cmp         dword ptr [i],8  00BD1571 7D 25                jge         funcCheck+98h (0BD1598h)      {        if( i==row )00BD1573 8B 45 F8             mov         eax,dword ptr [i]  00BD1576 3B 45 08             cmp         eax,dword ptr [row]  00BD1579 75 02                jne         funcCheck+7Dh (0BD157Dh)              continue;00BD157B EB E7                jmp         funcCheck+64h (0BD1564h)          if( Q[i][line]==1 )00BD157D 8B 45 F8             mov         eax,dword ptr [i]  00BD1580 C1 E0 05             shl         eax,5  00BD1583 03 45 10             add         eax,dword ptr [Q]          if( Q[i][line]==1 )00BD1586 8B 4D 0C             mov         ecx,dword ptr [line]  00BD1589 83 3C 88 01          cmp         dword ptr [eax+ecx*4],1  00BD158D 75 07                jne         funcCheck+96h (0BD1596h)              return 0;00BD158F 33 C0                xor         eax,eax  00BD1591 E9 35 01 00 00       jmp         DFS+0BBh (0BD16CBh)      }00BD1596 EB CC                jmp         funcCheck+64h (0BD1564h)      // 检查左上对角线    for ( i=row-1,j=line-1; i>=0&&j>=0; i--,j-- )00BD1598 8B 45 08             mov         eax,dword ptr [row]  00BD159B 83 E8 01             sub         eax,1  00BD159E 89 45 F8             mov         dword ptr [i],eax  00BD15A1 8B 4D 0C             mov         ecx,dword ptr [line]  00BD15A4 83 E9 01             sub         ecx,1  00BD15A7 89 4D EC             mov         dword ptr [j],ecx  00BD15AA EB 12                jmp         funcCheck+0BEh (0BD15BEh)  00BD15AC 8B 45 F8             mov         eax,dword ptr [i]  00BD15AF 83 E8 01             sub         eax,1  00BD15B2 89 45 F8             mov         dword ptr [i],eax  00BD15B5 8B 4D EC             mov         ecx,dword ptr [j]  00BD15B8 83 E9 01             sub         ecx,1  00BD15BB 89 4D EC             mov         dword ptr [j],ecx  00BD15BE 83 7D F8 00          cmp         dword ptr [i],0  00BD15C2 7C 21                jl          funcCheck+0E5h (0BD15E5h)  00BD15C4 83 7D EC 00          cmp         dword ptr [j],0  00BD15C8 7C 1B                jl          funcCheck+0E5h (0BD15E5h)      {        if( Q[i][j]==1 )00BD15CA 8B 45 F8             mov         eax,dword ptr [i]      {        if( Q[i][j]==1 )00BD15CD C1 E0 05             shl         eax,5  00BD15D0 03 45 10             add         eax,dword ptr [Q]  00BD15D3 8B 4D EC             mov         ecx,dword ptr [j]  00BD15D6 83 3C 88 01          cmp         dword ptr [eax+ecx*4],1  00BD15DA 75 07                jne         funcCheck+0E3h (0BD15E3h)              return 0;00BD15DC 33 C0                xor         eax,eax  00BD15DE E9 E8 00 00 00       jmp         DFS+0BBh (0BD16CBh)      }00BD15E3 EB C7                jmp         funcCheck+0ACh (0BD15ACh)      // 检查左下对角线    for ( i=row+1,j=line-1; i<8&&j>=0; i++,j-- )00BD15E5 8B 45 08             mov         eax,dword ptr [row]  00BD15E8 83 C0 01             add         eax,1  00BD15EB 89 45 F8             mov         dword ptr [i],eax  00BD15EE 8B 4D 0C             mov         ecx,dword ptr [line]  00BD15F1 83 E9 01             sub         ecx,1  00BD15F4 89 4D EC             mov         dword ptr [j],ecx  00BD15F7 EB 12                jmp         funcCheck+10Bh (0BD160Bh)  00BD15F9 8B 45 F8             mov         eax,dword ptr [i]  00BD15FC 83 C0 01             add         eax,1  00BD15FF 89 45 F8             mov         dword ptr [i],eax  00BD1602 8B 4D EC             mov         ecx,dword ptr [j]  00BD1605 83 E9 01             sub         ecx,1  00BD1608 89 4D EC             mov         dword ptr [j],ecx  00BD160B 83 7D F8 08          cmp         dword ptr [i],8  00BD160F 7D 21                jge         DFS+22h (0BD1632h)  00BD1611 83 7D EC 00          cmp         dword ptr [j],0  00BD1615 7C 1B                jl          DFS+22h (0BD1632h)      {        if( Q[i][j]==1 )00BD1617 8B 45 F8             mov         eax,dword ptr [i]  00BD161A C1 E0 05             shl         eax,5  00BD161D 03 45 10             add         eax,dword ptr [Q]  00BD1620 8B 4D EC             mov         ecx,dword ptr [j]  00BD1623 83 3C 88 01          cmp         dword ptr [eax+ecx*4],1  00BD1627 75 07                jne         DFS+20h (0BD1630h)              return 0;00BD1629 33 C0                xor         eax,eax  00BD162B E9 9B 00 00 00       jmp         DFS+0BBh (0BD16CBh)      }00BD1630 EB C7                jmp         funcCheck+0F9h (0BD15F9h)      // 检查右上对角线    for ( i=row-1,j=line+1; i>=0&&j<8; i--,j++ )00BD1632 8B 45 08             mov         eax,dword ptr [row]  00BD1635 83 E8 01             sub         eax,1  00BD1638 89 45 F8             mov         dword ptr [i],eax  00BD163B 8B 4D 0C             mov         ecx,dword ptr [line]  00BD163E 83 C1 01             add         ecx,1  00BD1641 89 4D EC             mov         dword ptr [j],ecx  00BD1644 EB 12                jmp         DFS+48h (0BD1658h)  00BD1646 8B 45 F8             mov         eax,dword ptr [i]  00BD1649 83 E8 01             sub         eax,1  00BD164C 89 45 F8             mov         dword ptr [i],eax  00BD164F 8B 4D EC             mov         ecx,dword ptr [j]  00BD1652 83 C1 01             add         ecx,1  00BD1655 89 4D EC             mov         dword ptr [j],ecx  00BD1658 83 7D F8 00          cmp         dword ptr [i],0  00BD165C 7C 1E                jl          DFS+6Ch (0BD167Ch)  00BD165E 83 7D EC 08          cmp         dword ptr [j],8  00BD1662 7D 18                jge         DFS+6Ch (0BD167Ch)      {        if( Q[i][j]==1 )00BD1664 8B 45 F8             mov         eax,dword ptr [i]  00BD1667 C1 E0 05             shl         eax,5  00BD166A 03 45 10             add         eax,dword ptr [Q]  00BD166D 8B 4D EC             mov         ecx,dword ptr [j]  00BD1670 83 3C 88 01          cmp         dword ptr [eax+ecx*4],1  00BD1674 75 04                jne         DFS+6Ah (0BD167Ah)              return 0;00BD1676 33 C0                xor         eax,eax  00BD1678 EB 51                jmp         DFS+0BBh (0BD16CBh)      }00BD167A EB CA                jmp         DFS+36h (0BD1646h)      // 检查右下对角线    for ( i=row+1,j=line-1; i<8&&j<8; i++,j++ )00BD167C 8B 45 08             mov         eax,dword ptr [row]  00BD167F 83 C0 01             add         eax,1  00BD1682 89 45 F8             mov         dword ptr [i],eax  00BD1685 8B 4D 0C             mov         ecx,dword ptr [line]  00BD1688 83 E9 01             sub         ecx,1  00BD168B 89 4D EC             mov         dword ptr [j],ecx  00BD168E EB 12                jmp         DFS+92h (0BD16A2h)  00BD1690 8B 45 F8             mov         eax,dword ptr [i]  00BD1693 83 C0 01             add         eax,1  00BD1696 89 45 F8             mov         dword ptr [i],eax  00BD1699 8B 4D EC             mov         ecx,dword ptr [j]  00BD169C 83 C1 01             add         ecx,1  00BD169F 89 4D EC             mov         dword ptr [j],ecx  00BD16A2 83 7D F8 08          cmp         dword ptr [i],8  00BD16A6 7D 1E                jge         DFS+0B6h (0BD16C6h)  00BD16A8 83 7D EC 08          cmp         dword ptr [j],8  00BD16AC 7D 18                jge         DFS+0B6h (0BD16C6h)      {        if( Q[i][j]==1 )00BD16AE 8B 45 F8             mov         eax,dword ptr [i]  00BD16B1 C1 E0 05             shl         eax,5  00BD16B4 03 45 10             add         eax,dword ptr [Q]  00BD16B7 8B 4D EC             mov         ecx,dword ptr [j]  00BD16BA 83 3C 88 01          cmp         dword ptr [eax+ecx*4],1  00BD16BE 75 04                jne         DFS+0B4h (0BD16C4h)              return 0;00BD16C0 33 C0                xor         eax,eax  00BD16C2 EB 07                jmp         DFS+0BBh (0BD16CBh)      }00BD16C4 EB CA                jmp         DFS+80h (0BD1690h)      return 1;00BD16C6 B8 01 00 00 00       mov         eax,1  }


0 0
原创粉丝点击