CSU 1562 — Fun House

来源:互联网 发布:sql数据库可视化工具 编辑:程序博客网 时间:2024/06/04 18:47

原题: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]);}}


0 0