POJ 2816 红与黑 解题报告
POJ 2816 红与黑 解题报告
编号:2816
考查点:递归
思路:主要的问题在于如何让其向不同方向进行递归,我的思路是另外开个变量,然后switch判断方向,结果自然而然的栈溢出了.。书上的方法确实经典,每次先加了,就不用考虑很多异常情况了,我的数组从1开始,事先全初始化为#,比书上代码又简洁了些.。
提交情况:自己的方法提交出现了多次RunTime Error.后来重写的代码还不错,轻松的AC了.。
Source Code:
//POJ Grids 2816
#include <iostream>
using namespace std;
int x,y;
char ch[25][25];
int Search(int m,int n)
{
if (ch[m][n]=='#')
return 0;
else
ch[m][n] ='#';
return 1 + Search(m-1,n) + Search(m+1,n) + Search(m,n-1) + Search(m,n+1);
}
int main()
{
while (true)
{
cin>>x>>y;
if (x==0&&y==0)
break;
int m,n;
memset(ch,'#',sizeof ch);
for (int i=1;i<=y;i++)
{
for (int j=1;j<=x;j++)
{
cin>>ch[i][j];
if (ch[i][j]=='@')
{
m = i;
n = j;
}
}
}
int count = Search(m,n);
cout<<count<<endl;
}
return 0;
}
总结:表把问题想复杂了.。
By Ns517
Time