博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10010 - Where's Waldorf?
阅读量:5026 次
发布时间:2019-06-12

本文共 1835 字,大约阅读时间需要 6 分钟。

这道题是要找到字符串在字符矩阵里的位置,并输出其头字母的坐标。我们先找到首字母的位置,

然后按照八个方向当中的一个搜索,如果能找到完整的字符串,就输出坐标。与DFS每个点按照

八个方向搜索不同的是,这里只是按照一个方向一个方向地搜索。所以搜索函数也稍有不同。

#include
#include
#include
#include
#define MAXN 60 int cas, m, n, q; int x, y; char r[MAXN][MAXN]; const int dx[] = { 1, 1, 1, -1, -1, -1, 0, 0}; const int dy[] = { 0, 1, -1, 0, 1, -1, 1, -1}; void search( const char *a, int &x, int &y) {
int pos, nx, ny; for( int i = 1; i <= m; i ++) {
for( int j = 1; j <= n; j ++) {
if( r[i][j] == a[0]) {
for( int k = 0; k < 8; k ++) {
pos = 0; nx = i; ny = j; while( a[pos] && a[pos] == r[nx][ny]) {
nx += dx[k]; ny += dy[k]; pos ++; } if( a[pos] == 0) {
x = i; y = j; return; } } } } } } int main() {
scanf( "%d", &cas); for( int tt = 1; tt <= cas; tt ++) {
char word[MAXN]; if( tt >= 2) printf( "\n"); memset( r, 0, sizeof r); scanf( "%d%d", &m, &n); for( int i = 1; i <= m; i ++) {
scanf( "%s", word); for( int j = 1; j <= n; j ++) {
r[i][j] = tolower(word[j - 1]); } } scanf( "%d", &q); while( q --) {
scanf( "%s", word); int len = strlen( word); for( int i = 0; i < len; i ++) {
word[i] = tolower( word[i]); } search( word, x, y); printf( "%d %d\n", x, y); } } return 0; }

 

转载于:https://www.cnblogs.com/Yu2012/archive/2012/01/28/2330607.html

你可能感兴趣的文章
Hive时间函数笔记
查看>>
clojure-emacs-autocomplete
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
10 华电内部文档搜索系统 search03
查看>>
[HIHO1149]回文字符序列(dp)
查看>>
[HDU1402]A * B Problem Plus(FFT)
查看>>
[CF803C] Maximal GCD(gcd,贪心,构造)
查看>>
逆时针旋转的矩阵变换
查看>>
第10周15/16/17
查看>>
【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
查看>>
四六级作文常见错误解析(转载)
查看>>
Tomcat
查看>>
./是当前目录 ../是当前的上一级目录。上上级就是../../一般绝对路径时候常用...
查看>>
linux支持FTP和SFTP服务【1】
查看>>
树的递归与非递归遍历方法
查看>>
每天一个Linux命令(6):rmdir命令
查看>>
oracle连接的三个配置文件(转)
查看>>
Vim配置文件(Vimrc)
查看>>
RecyclerView 局部刷新(获取viewHolder 去刷新)
查看>>
PHP表单(get,post)提交方式
查看>>