程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 4414 Finding crosses 暴力枚舉

HDU 4414 Finding crosses 暴力枚舉

編輯:C++入門知識

題意:在#o組成的n*n(3<=n<=50)的圖中找到等長十字架長度至少為3,並且周圍一圈沒有#的十字架的個數。
題解:枚舉每一個#假設其為一個合法十字架的中心位置即可。

Sure原創,轉載請注明出處。
[cpp] 
#include <iostream> 
#include <cstdio> 
using namespace std; 
const int maxn = 52; 
const int move[4][2] = {{-1,0},{0,1},{1,0},{0,-1}}; 
char map[maxn][maxn]; 
int n; 
 
void read() 

    for(int i=0;i<n;i++) 
    { 
        scanf("%s",map[i]); 
    } 
    return; 

 
bool judge(int x,int y) 

    if(x >= 0 && y >= 0 && x < n && y < n && map[x][y] == '#') 
    { 
        return true; 
    } 
    return false; 

 
bool check(int x,int y) 

    int i = 1; 
    for(;;i++) 
    { 
        bool flag = true; 
        for(int j=0;j<4;j++) 
        { 
            int tx = x + i * move[j][0]; 
            int ty = y + i * move[j][1]; 
            if(judge(tx , ty) == false) 
            { 
                flag = false; 
            } 
            else 
            { 
                int pos = (j + 1) % 4; 
                int xx = tx + move[pos][0]; 
                int yy = ty + move[pos][1]; 
                if(judge(xx,yy)) return false; 
 
                pos = (j + 3) % 4; 
                xx = tx + move[pos][0]; 
                yy = ty + move[pos][1]; 
                if(judge(xx,yy)) return false; 
            } 
        } 
        if(flag == false) break; 
    } 
    if(i == 1) return false; 
    for(int j=0;j<4;j++) 
    { 
        int tx = x + i * move[j][0]; 
        int ty = y + i * move[j][1]; 
        if(judge(tx , ty)) return false; 
    } 
    return true; 

 
void solve() 

    int cnt = 0; 
    for(int i=0;i<n;i++) 
    { 
        for(int j=0;j<n;j++) 
        { 
            if(map[i][j] == '#') 
            { 
                if(check(i,j)) cnt++; 
            } 
        } 
    } 
    printf("%d\n",cnt); 
    return; 
}  www.2cto.com
 
int main() 

    while(~scanf("%d",&n) && n) 
    { 
        read(); 
        solve(); 
    } 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved