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;
}
各种逻辑错误,小型代码错误:
思路倒不难,只是这段时间代码敲的少,能力严重下降了!!!
主要是用递归函数来模拟人的比较方法。和二叉树的逻辑差不多的。
代码如下:
#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;
}
相关文章推荐
- Uva-297 - Quadtrees(四分树与结构体指针)
- uva297 Quadtrees (树的重建)
- UVa 297 Quadtrees(模拟&四分树)
- UVA 297 - Quadtrees
- uva 297 quadtrees——yhx
- Quadtrees UVA - 297
- Uva297 Quadtrees【递归建四分树】【例题6-11】
- UVA 297 Quadtrees( 数据结构,树)
- UVA-297 Quadtrees (四分树)
- UVA - 297:Quadtrees
- UVa 297 Quadtrees
- uva297 Quadtrees (线段树思想,区间操作)
- 例题6-11 UVa297 Quadtrees(四分树)
- UVa 297 Quadtrees -SilverN
- UVA - 297 Quadtrees
- UVa297 例题6-11 四分树(Quadtrees)
- UVa 297 Quadtrees -SilverN
- uva297 - Quadtrees 入门经典II 第六章 数据结构基础 例题6-11
- UVa 297 Quadtrees(四分树)
- 例题6-11 四分树(Quadtrees, UVa 297)