您的位置:首页 > 其它

UVA 297 - Quadtrees

2012-11-02 22:18 423 查看
我自己的神码,祸害了我两天的时间:


各种逻辑错误,小型代码错误:

思路倒不难,只是这段时间代码敲的少,能力严重下降了!!!

主要是用递归函数来模拟人的比较方法。和二叉树的逻辑差不多的。

代码如下:

#include <iostream>
#include <string>
using namespace std;
string s1, s2;
int black;
int s1n, s2n;
int mypow(int e, int n)//我自己写的pow()函数;
{
int sum= 1;
for(int i = 0; i < n; i++)
sum*=e;
return sum;
}
int returnblack(int presionnum, int x)//returnblack()函数用来对付【e】【peeepeeef】的情况
{
for(int i = 1; i <= 4; i++)
{
if(x == 1)
{
if(s1[s1n] == 'p'){++s1n;returnblack(presionnum+1, 1);}
else {
if(s1[s1n] == 'f')black += (1024/(mypow(4,presionnum)));
++s1n;//cout<<s1n<<endl;
}
}
else
{
if(s2[s2n] == 'p'){++s2n;returnblack(presionnum+1, 2);}
else {
if(s2[s2n] == 'f')black += (1024/(mypow(4,presionnum)));
++s2n;
}
}
}
return 0;
}
int nextnode(int x)//用来对付【f】【peeepeeef】的情况。
{
for(int i = 1; i <= 4; i++)
{
if(x == 1)
{
if(s1[s1n] == 'p'){++s1n;nextnode(1);}
else ++s1n;
}
else
{
if(s2[s2n] == 'p'){++s2n;nextnode(2);}
else ++s2n;
}
}
return 0;
}
int Cacultor(int presionnum)//当p与p相遇时就进行子代的比较。如:【peeef】【pffff】
{

for(int temp = 1; temp <= 4;temp++)
{//cout<<"****"<<s1[s1n]<<":"<<s1n<<" "<<"****"<<s2[s2n]<<":"<<s2n<<endl;
if(s1[s1n] == 'p' && s2[s2n] == 'p')
{++s1n; ++s2n;Cacultor(presionnum+1);}
else if(s1[s1n] == 'f' || s2[s2n] == 'f')
{
black += (1024/mypow(4, presionnum));//cout<<"***"<<black<<endl;
if(s1[s1n] == 'p') {++s2n;++s1n;nextnode(1);}
else if(s2[s2n] == 'p') {++s1n;++s2n;nextnode(2);}
else { ++s1n; ++s2n;}
}
else if(s1[s1n] == 'e' || s2[s2n] == 'e' )
{
if(s1[s1n] == 'p')
{
++s2n;++s1n;returnblack(presionnum+1,1);
}
else if(s2[s2n] == 'p')
{
++s1n;++s2n;returnblack(presionnum+1,2);
}
else {++s1n; ++s2n;}
}
}
return 0;
}

int main ()
{
int num;
cin>>num;
while(num--)
{
black = s1n = s2n = 0;//black用来记录黑色像素的个数,s1n和s2n分别用来记录s1和s2的比较节点处的当前位置。
cin>>s1>>s2;
if(s1[0] == 'p'&& s2[0] == 'p')
{++s1n;++s2n; Cacultor(1);}
else if(s1[0] == 'f' || s2[0] == 'f')
{
black += (1024/mypow(4, 0));
if(s1[0] == 'p') nextnode(1);
else if(s2[0] == 'p') nextnode(2);
}
else if(s1[0] == 'e' || s2[0] == 'e' )
{
if(s1[0] == 'p')
returnblack(0,1);
else if(s2[0] == 'p')
returnblack(0,2);
}
cout<<"There are "<<black<<" black pixels."<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: