Tyvj 1004 滑雪~__搜尋

來源:互聯網
上載者:User
       Tyvj 1004

問題描述: 輸入一個 r*c 的矩陣,並且矩陣中的每個元素都是
    正整數,從其中某個大的元素出發,向4個方向(上下左右)
    遞迴,直到划出一條能夠通過較多數位線,並且滿足數字
    從大到小。


解決方案: 其實,我們可以人為的把我們輸入的每一個元素所對應
    的數值當做是一座座的山峰,正如題目要求的那樣,滑雪
    然後儘可能從高處的山峰往低處的山峰滑行,第一次做的
    時候,沒看懂範例,琢磨了一段時間後,突然明白了,題目
    的含義,實際上就是按照一定的路線,從最大的元素向最小的
    元素走,然後記錄所走的步數即可,範例很特殊,25步走出來
    後,剛好構成了蛇形陣。
        

    第一步,一一枚舉每個點,看他是不是能作為我們開始滑行
    的起點。
    第二步,找到這個點後,向4個方向DFS,即可。
    第三步,找到的那個最大的起點,就是我們的最大路線


代碼:  (1)在代碼中,學會了一種解決搜尋問題的常用方法,那就是設定
    一個dis [][],數組,當我們向4個方向,也就是通常所說的
    上下左右進行搜尋時,我們就定義這樣一個數組:
    dis[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
    其實很簡單,,大家腦補下就行。。。。

    如果所涉及的問題稍微有些複雜的話,向8個方向進行搜尋
    那麼我們定義這樣一個數組:
    dis[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1}
            ,{1,-1},{1,0},{1,1}};
    思路和方法類似,就是又多了4個對角線上的方向而已~

    (2)並且在搜尋問題中,我們還要設定一個vis[][]數組,這個
    數組的大小和處理問題時所開的數組一定是等大的。
    並且一開始用memset對vis數組進行初始化,可以初始化為
    0或者-1,,其他的數值都不行的。
    

    貼上模板~~



 int nx, ny;    for ( int i = 0;i < 4;i++ )    {        nx = x + dis[i][0];        ny = y + dis[i][1];        if ( 0 <= nx&&nx < r&&0 <= ny&&ny < c&&a[x][y] > a[nx][ny] )        {            t = max( search( nx, ny ),t );        }    }

   當做模板記住它~


    其實在很多情況下,如果實在看不出那些大牛們的代碼。
    可以手模下,,雖然浪費時間,但是很容易就能理解了,
    我就是這麼手模過來的~~~







   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.