您的位置:首页 > 其它

uva10010--String

2011-12-08 15:54 141 查看
这个题目也是比较基础的字符串问题,对我来说代码略长了点。不过还好是过了~

//#define LOCAL
#include <stdio.h>
#include <string.h>

#define MAXN 50 + 10

char letters[MAXN][MAXN];
bool isVisited[MAXN][MAXN];

struct Node
{
int x;
int y;
} node;

void findChar(char);
void findWaldorf();

int row, col;

int main()
{
#ifdef LOCAL
freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
int cases;
scanf("%d", &cases);
int i, j;
int k;
for(k = 0; k < cases; k++)
{
// 数据初始化
memset(letters, 0, sizeof(letters));
memset(isVisited, 0, sizeof(isVisited));
// 数据输入
scanf("%d%d", &row, &col);

for(i = 0; i < row; i++)
for(j = 0; j < col; j++)
{
scanf("\n%c", &letters[i][j]);
if(letters[i][j] >= 97)
letters[i][j] = letters[i][j] - 32;
}

// 算法主体
findWaldorf();

// 输出结果
if(k != cases - 1)
printf("\n");

}
return 0;
}

void findWaldorf()
{

int count;
int i;
bool flag = false;
char word[MAXN];
scanf("%d", &count);
while(count--)
{
// 输入单词并将单词转化成大写
memset(word, 0, sizeof(word));
memset(isVisited, 0, sizeof(isVisited));
scanf("%s", word);
for(i = 0; i < strlen(word); i++)
{
if(word[i] >= 97)
word[i] -= 32;
}

node.x = 0;
node.y = 0;
flag = false;
while(!flag)
{
findChar(word[0]);
// 向上比较
if(node.x >= strlen(word) - 1 && !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x - i][node.y] != word[i])
{
flag = false;
break;
}
flag = true;
}
}

// 向左上比较
if(node.x >= strlen(word) - 1 && node.y >= strlen(word) - 1 && !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x - i][node.y - i] != word[i])
{
flag = false;
break;
}
flag = true;
}
}

// 向左比较
if(node.y >= strlen(word) - 1 && !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x][node.y - i] != word[i])
{
flag = false;
break;
}
flag = true;
}
}

// 向右上比较
if(node.x >= strlen(word) - 1 && col - node.y >= strlen(word) && !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x - i][node.y + i] != word[i])
{
flag = false;
break;
}
flag = true;
}
}

// 向右比较
if(col - node.y >= strlen(word) && !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x][node.y + i] != word[i])
{
flag = false;
break;
}
flag = true;
}
}

// 向右下比较
if(row - node.x >= strlen(word) && col - node.y >= strlen(word) && !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x + i][node.y + i] != word[i])
{
flag = false;
break;
}
flag = true;
}
}

// 向下比较
if(row - node.x >= strlen(word)&& !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x + i][node.y] != word[i])
{
flag = false;
break;
}
flag = true;
}
}

// 向左下比较
if(row - node.x >= strlen(word) && node.y >= strlen(word) - 1 && !flag)
{
for(i = 0; i < strlen(word); i++)
{
if(letters[node.x + i][node.y + i] != word[i])
{
flag = false;
break;
}
flag = true;
}
}
}

// 输出结果
printf("%d %d\n", node.x + 1, node.y + 1);

}
}

void findChar(char temp)
{
for(int i = 0; i < col; i++)
for(int j = 0; j < row; j++)
if(letters[j][i] == temp && !isVisited[j][i])
{
node.x = j;
node.y = i;
isVisited[j][i] = true;
return;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: