返回信息流题目链接:http://10.105.242.81/problem/contest/642/problem/A/
题目图片:
我的思路:题目要求应该是在这个地图中找合适的'O'的个数,使它到'X'的步数不超过k步,所以我就在限制条件下进行深搜,感觉正确啊,难道还有什么其他的测试用例被忽略了?
我的代码:
#define lxc
#include<stack>
#include<stdio.h>
#include<iostream>
#include<limits.h>
#include<string.h>
#include<queue>
#include<string>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
using namespace std;
char map1[22][22];
bool visited[22][22];
int n,m;
bool isOk(int row, int clo, int k) {
if (row<1||clo<1||row>n||clo>m)
return true;
//cout<<"isok:"<<row<<" " <<clo<<" "<<map1[row][clo]<<" "<<k<<endl;
if (k==0)
return true;
if (map1[row][clo] == 'X'){
// cout<<"X"<<endl;
return false;
}
if (visited[row][clo]) {
return true;
}
visited[row][clo] = true;
return (isOk(row-1,clo,k-1)&&isOk(row+1,clo,k-1)&&isOk(row,clo-1,k-1)&&isOk(row,clo+1,k-1));
}
int main(){
#ifdef lxc
freopen("in.txt","r", stdin);
#endif // lxc
int T;
int k;
scanf("%d", &T);
while (T--) {
scanf("%d%d%d",&n,&m,&k);
for (int i=1; i<=n; i++) {
scanf("%s",map1[i]+1);
}
int top = k, down = n-k+1;
int left = k, right = m-k+1;
//cout<<left<<" "<<right<<" "<<top<<" "<<down<<endl;
int sum = 0;
for (int i=top; i<=down; i++) {
for (int j= left; j<=right; j++) {
memset(visited, 0, sizeof(visited)); // clear to false;
if (map1[i][j] == 'O' && isOk(i,j, k)) {
cout<<"the suitable position:"<<i<<" "<<j<<endl;
sum++;
}
}
}
printf("%d\n",sum);
}
#ifdef lxc
fclose(stdin);
#endif // lxc
return 0;
}
还望大神们赐教[ema1]
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92677同步于 2017/3/29
ACM_ICPC机器人发帖
【问题】北邮OJ, Saber's Board,为什么我总是答案错误?
lxclxc
2017/3/29镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。