• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            pku Left labyrinths DFS網格圖搜索-注意這種非優先路搜索判重一定要帶方向向量

            題目意思很簡單,一個迷宮,問是否能夠從入口處進入,在岔道口處向左拐,問采取這種策略能夠走到中心。
            由于這里不是全DFS,而是具有某種優先級順序,在這里,優先級是指一直向左拐。判重的時候不能僅僅判斷這個格子是否走過,還要加上方向向量,即從什么方向走入這個格子的。
              1 # include <iostream>
              2 # include <cstring>
              3 # include <cstdio>
              4 using namespace std;
              5 char map[105][105];
              6 bool used[105][105][4];//方向:0-向上 1-向右 2-向下 3-向左
              7 int n,m;
              8 int sr=-1,sc=-1;
              9 inline bool chk(int r,int c)
             10 {
             11    if(r+1<n&&r-1>=0&&map[r+1][c]=='#'&&map[r-1][c]=='#'return true;
             12    else if(c+1<m&&c-1>=0&&map[r][c-1]=='#'&&map[r][c+1]=='#'return true;
             13    else return false;
             14 }
             15 inline int encode(int r,int c,int dir)
             16 {  
             17      return (((r<<7)|c)<<2)|dir;
             18 }
             19 inline bool legal(int r,int c)
             20 {
             21    if(r>=0&&r<n&&c>=0&&c<m&&map[r][c]=='.'return true;
             22    else return false;
             23 }
             24 void findstart(int r,int c)
             25 {
             26    if(r>=n||r<0||c>=m||c<0||map[r][c]!='.'return;
             27    if(chk(r,c))
             28    {
             29       sr=r;
             30       sc=c;
             31       return;
             32    }
             33    map[r][c]=' ';
             34    findstart(r+1,c);
             35    findstart(r-1,c);
             36    findstart(r,c+1);
             37    findstart(r,c-1);
             38 }
             39 bool dfs(int r,int c,int dir)
             40 {
             41   // printf("%d %d %d\n",r,c,dir);
             42   // system("pause");
             43    if(used[r][c][dir]) return false;
             44    else
             45    {
             46        if(legal(r,c)&&legal(r+1,c)&&legal(r,c+1)&&legal(r+1,c+1)||
             47           legal(r,c-1)&&legal(r,c)&&legal(r+1,c-1)&&legal(r+1,c)||
             48           legal(r-1,c)&&legal(r,c)&&legal(r-1,c+1)&&legal(r,c+1)||
             49           legal(r-1,c-1)&&legal(r-1,c)&&legal(r,c-1)&&legal(r,c)) 
             50           return true;
             51        used[r][c][dir]=true;
             52        switch(dir)
             53        {
             54          case 0:
             55               if(legal(r,c-1)) return dfs(r,c-1,3);
             56               else if(legal(r-1,c)) return dfs(r-1,c,0);
             57               else if(legal(r,c+1)) return dfs(r,c+1,1);
             58               break;
             59          case 1:
             60               if(legal(r-1,c)) return dfs(r-1,c,0);
             61               else if(legal(r,c+1)) return dfs(r,c+1,1);
             62               else if(legal(r+1,c)) return dfs(r+1,c,2);
             63               break;
             64          case 2:
             65               if(legal(r,c+1)) return dfs(r,c+1,1);
             66               else if(legal(r+1,c)) return dfs(r+1,c,2);
             67               else if(legal(r,c-1)) return dfs(r,c-1,3);
             68               break;
             69          case 3:
             70               if(legal(r+1,c)) return dfs(r+1,c,2);
             71               else if(legal(r,c-1)) return dfs(r,c-1,3);
             72               else if(legal(r-1,c)) return dfs(r-1,c,0);
             73               break;
             74        } ;
             75        return false;
             76    }
             77    
             78 }
             79 int main()
             80 {
             81     //int n,m;
             82     scanf("%d%d",&n,&m);
             83     for(int i=0;i<n;i++)
             84        scanf("%s",map[i]);
             85     for(int i=0;i<n;i++)
             86     {
             87         if(map[i][0]=='.')
             88            findstart(i,0);
             89         if(map[i][m-1]=='.')
             90            findstart(i,m-1);
             91     }
             92     for(int i=0;i<m;i++)
             93     {
             94         if(map[0][i]=='.')
             95            findstart(0,i);
             96         if(map[n-1][i]=='.')
             97            findstart(n-1,i);
             98     }
             99   //  for(int i=0;i<n;i++)
            100     //  printf("%s\n",map[i]);
            101   //  system("pause");
            102     memset(used,false,sizeof(used));
            103     if(sr+1<n&&sr-1>=0&&map[sr+1][sc]=='#'&&map[sr-1][sc]=='#')
            104        if(sc+1>=m||map[sr][sc+1]==' ')
            105           printf("%s\n",dfs(sr,sc,3)?"YES":"NO");
            106        else
            107           printf("%s\n",dfs(sr,sc,1)?"YES":"NO");
            108     else
            109        if(sr+1>=n||map[sr+1][sc]==' ')
            110           printf("%s\n",dfs(sr,sc,0)?"YES":"NO");
            111        else
            112           printf("%s\n",dfs(sr,sc,2)?"YES":"NO");
            113     //system("pause");
            114     return 0;
            115            
            116 }
            117 

            posted on 2010-10-15 16:09 yzhw 閱讀(196) 評論(0)  編輯 收藏 引用 所屬分類: search

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久天天躁狠狠躁夜夜不卡| 久久综合九色综合精品| 久久99精品国产麻豆蜜芽| 久久精品亚洲日本波多野结衣| 97久久超碰国产精品2021| 精品久久久久久国产| 久久天天日天天操综合伊人av| 久久婷婷五月综合97色直播| 国产69精品久久久久久人妻精品| 人妻少妇久久中文字幕一区二区| 久久精品天天中文字幕人妻 | 亚洲精品乱码久久久久久| 亚洲精品无码久久久影院相关影片| 嫩草伊人久久精品少妇AV| 无码乱码观看精品久久| 精品熟女少妇av免费久久| 思思久久精品在热线热| 2022年国产精品久久久久| 亚洲国产另类久久久精品小说| 国产激情久久久久影院小草 | 久久ZYZ资源站无码中文动漫| 久久不射电影网| 77777亚洲午夜久久多喷| 品成人欧美大片久久国产欧美| 久久久久久夜精品精品免费啦 | 久久精品国产亚洲5555| 囯产极品美女高潮无套久久久| www性久久久com| 国产高潮国产高潮久久久| 亚洲香蕉网久久综合影视| 少妇熟女久久综合网色欲| 久久国产成人午夜AV影院| 精品午夜久久福利大片| 久久青青草原国产精品免费 | 人妻精品久久久久中文字幕69 | 手机看片久久高清国产日韩| 久久美女网站免费| 欧美久久精品一级c片片| 久久人人爽人人爽人人片AV不| 97久久精品人妻人人搡人人玩| 国产精品久久久久…|