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

uva_10010-Wheres Waldorf?

編輯:C++入門知識

[cpp]
/**這裡采用暴力法,首先將所有大寫字母轉化為小寫,然後遍歷整個矩陣,
 *搜索8個方向,獲得搜索到的字符串,然後與目標字符串
 *對比,如果搜索到的字符串前面包含目標字符串,則找到該串,輸出位置
 */ 
#include <cstdio> 
#include <algorithm> 
#include <cstring> 
#include <iostream> 
using namespace std; 
 
#define MAX 200 
#define DIR 8 
 
char map[MAX][MAX]; 
char street[MAX][MAX]; 
char all[MAX]; 
int dir[][2]={{0,-1}, {1,-1}, {1,0}, {1,1},  
              {0,1}, {-1,-1}, {-1,0}, {-1,1}}; 
 
//找到每一組字符串 
char *findAll(int row, int col, int max_row, int max_col, int d){ 
    int tmp_x, tmp_y, tmp_row, tmp_col, n(0); 
    all[n++] = map[row][col]; 
        tmp_row = row;      tmp_col = col; 
        tmp_x = 0;          tmp_y = 0; 
        do{ 
            tmp_x += dir[d][0];     tmp_y += dir[d][1]; 
            tmp_row = row + tmp_x;      tmp_col = col + tmp_y; 
            if(tmp_row >= 0 && tmp_row < max_row && tmp_col >= 0 && tmp_col < max_col) 
                all[n++] = map[tmp_row][tmp_col]; 
        }while(tmp_row >= 0 && tmp_row < max_row && tmp_col >= 0 && tmp_col < max_col); 
    all[n] = '\0'; 
    return all; 

 
//比較目標串是否是找到字符串的子串 
int findstreet(const char *s, char *all){ 
    for(int i=0; i<strlen(s); i++){ 
            if(s[i]!=all[i]) 
                return 0; 
    } 
    return 1; 

 
//遍歷每個位置 
void findPos(const char *s, int row, int col){ 
    for(int i=0; i<row; i++){ 
        for(int j=0; j<col; j++){ 
            for(int l=0; l<DIR; l++){ 
                char *all = findAll(i,j,row,col,l); 
                if(findstreet(s,all)){ 
                    printf("%d %d\n",i+1,j+1); 
                    return ; 
                } 
            } 
        } 
    } 

 
int main(int argc, char const *argv[]) 

    int cas, row, col, ans_num; 
    scanf("%d",&cas); 
    while(cas--){ 
        scanf("%d %d",&row,&col); 
        for(int i=0; i<row; i++){ 
            scanf("%s",&map[i]); 
            for(int j=0; j<strlen(map[i]); j++) 
                if(isupper(map[i][j])) map[i][j] += 32; 
        }  www.2cto.com
        scanf("%d",&ans_num); 
        getchar(); 
        for(int i=0; i<ans_num; i++){ 
            gets(street[i]); 
            for(int j=0; j<strlen(street[i]); j++) 
                if(isupper(street[i][j])) street[i][j] += 32; 
        } 
        for(int i=0; i<ans_num; i++){ 
            findPos(street[i], row, col); 
        } 
    } 
    return 0; 

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