C语言循环解释,C语言八皇后问题,解释代码是什么意思。尤其是for循环是什么意思...

2014-12-31 回答

#include #define n 8 int column[n+1];  //同栏是否有皇后,1表示有 int rup[2*n+1];  //右上至左下是否有皇后,1表示有 int lup[2*n+1];  //左上至右下是否有皇后,1表示有 int queen[n+1]={0};           //????  用来记录第i行的皇后放在第几个位置 int num;  //case编号 void backtrack(int i);  //递回求解 void main() { int i; num=0; for(i=1;i<=n;i++) column[i]=1;         //????    column  rup  lup都是标记竖列,斜排是否能放皇后的,初始化为1,表示开始的时候所有位置都可以放 for(i=1;i<=2*n;i++) rup[i]=lup[i]=1;              //????  同上 backtrack(1);  //重新寻找符合要求的位置 } void showanswer()  //输出结果 { int x,y; printf("\ncase %d\n",++num); for(y=1;y<=n;y++) { for(x=1;x<=n;x++) { if(queen[y]==x)                      //?????????????   按每行每个位置输出,如果该位置是皇后就输出黑框,否则就是白框 { printf("*");//■表示皇后,输出时为白色方框 } else { printf("."); } } printf("\n"); } } void backtrack(int i)  //递回求解 { int j; if(i>n)  //不再回溯                              //???????   递归结束条件,i如果能够走到8以上,说明前面8行都已经填上皇后,就是一个解,去输出 { showanswer(); } else { for(j=1;j<=n;j++) { if(column[j]==1 && rup[i+j]==1 && lup[i-j+n]==1)         //?????????   表示第i行第j位置能够放皇后 { queen[i]=j;  //设为占用                                  //???????????                              把第i行的皇后放在j位置 column[j]=rup[i+j]=lup[i-j+n]=0;              //??????                              把i,j位置所在的竖列和斜排的标记设为不能放皇后了 backtrack(i+1);                                      //????????      递归寻找i+1行 能放皇后的位置 column[j]=rup[i+j]=lup[i-j+n]=1;         //??????????                         递归结束回来之后要把标记重新设回可以放,进行下一次搜索 } } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值