beautyofprogramming的中国象棋将帅问题,哪个更高效?
最近在看这本书,里面关于这个问题给出了三个都非常有代表性的解法,但貌似分析起来,时间复杂度都一样的。有兴趣的同学可以一起探讨下。
核心代码:
解法一:
for(;LGET(b) <= GRIDW * GRIDW;LSET(b,(LGET(b) + 1)))
for(RSET(b,1);RGET(b) <= GRIDW*GRIDW;RSET(b,(RGET(b) + 1)))
if(LGET(b) % GRIDW != RGET(b) % GRIDW)
printf("A = %d, B= %d\n",LGET(b),RGET(b));
printf("%d\n",b);
for(RSET(b,1);RGET(b) <= GRIDW*GRIDW;RSET(b,(RGET(b) + 1)))
if(LGET(b) % GRIDW != RGET(b) % GRIDW)
printf("A = %d, B= %d\n",LGET(b),RGET(b));
printf("%d\n",b);
解法二:
while(i--){
if(i/9%3 == i%9%3)
continue;
printf("A=%d,B=%d\n",i/9+1,i%9+1);
}
if(i/9%3 == i%9%3)
continue;
printf("A=%d,B=%d\n",i/9+1,i%9+1);
}
解法三:
for(i.a=1;i.a<=9;i.a++){
for(i.b=1;i.b<=9;i.b++)
if(i.a%3!=i.b%3){
printf("A=%d,B=%d\n",i.a,i.b);
}
}
for(i.b=1;i.b<=9;i.b++)
if(i.a%3!=i.b%3){
printf("A=%d,B=%d\n",i.a,i.b);
}
}
posted on 2012-11-15 19:44 ywnbluesky 阅读(779) 评论(0) 收藏 举报