原题:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1562
题意:光线从‘*’ 发射,遇到 '/' 或 '\' 进行反射,最后射到墙上,将 'x' 变成 '&' ;
思路:因为 '/' 和 '\' 是45度倾斜的,所以光线反射的时候角度为90度;
所以枚举搜索一下就好啦 ^_^
#include<stdio.h>
int f[4][2] = {-1, 0, 0, 1, 1, 0, 0, -1};
int aa, bb;
char str[25][25];
void dfs(int a, int b, int d)
{
int u = a+f[d][0];
int v = b+f[d][1];
if(str[u][v] == 'x')
{
aa = u;
bb = v;
return;
}
if(str[u][v] == '.')
dfs(u, v, d);
if(str[u][v] == '/')
{
if(d == 0)
dfs(u, v, 1);
if(d == 1)
dfs(u, v, 0);
if(d == 2)
dfs(u, v, 3);
if(d == 3)
dfs(u, v, 2);
}
if(str[u][v] == '\\')
{
if(d == 0)
dfs(u, v, 3);
if(d == 1)
dfs(u, v, 2);
if(d == 2)
dfs(u, v, 1);
if(d == 3)
dfs(u, v, 0);
}
}
int main()
{
int cas = 1;
int w, l;
while(scanf("%d%d", &w, &l)!=EOF)
{
if(w == 0 && l == 0)
break;
for(int i = 1;i<=l;i++)
scanf("%s", str[i]);
for(int i = 1;i<=l;i++)
{
for(int j = 0;j<w;j++)
{
if(str[i][j] == '*')
{
if(i == 1)
dfs(i, j, 2);
if(j == 0)
dfs(i, j, 1);
if(i == l)
dfs(i, j, 0);
if(j == w-1)
dfs(i, j, 3);
}
}
}
str[aa][bb] = '&';
printf("HOUSE %d\n", cas++);
for(int i = 1;i<=l;i++)
printf("%s\n", str[i]);
}
}