热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

USACO1.5CheckerChallenge(checker)

Note:ThisproblemisthesamewihtEgihtQueenproblem,whichisaclassicDFSproblemButifyouuseDFSd

//Note: This problem is the same wiht "Egiht Queen" problem, which is a classic DFS problem
//But if you use DFS directly, you can‘t meet the time requirement "1 CPU second"
//Since when you find one solution, its reflection is another solution.
//If the ‘num‘ is even, you can search the first (num/2)-1 placement in the first row
//and get solution number sum1 .Then the total_s0lution = 2 * sum1;
//If the ‘num‘ is even, you can search the first (num/2)-1 and get sum1.Then you compute the
//slolution in placement num/2 and get sum2, the total_solution = 2*sum1 + sum2;
/*
ID: haolink1
PROG: checker
LANG: C++
*/
#include
#include
//#include
using namespace std;
const short MAXN = 13;
//Record the column placement in each row.
short row_record[MAXN]={0};
//The below three arrays record checker‘s placement info which is used to check whether the
//later checker‘s placement meet the requirement.This is the key point to redcue the running time.
//Record the the number of checker in column j
//(i, j) -> j
char col_mark[MAXN] = {0};
//Record the number of checker in up-diagonal of (i,j)
//(i, j) -> i+j
char updiag[2*MAXN] = {0};
//Record the number of checker in the down-diagonal of (i,j)
//(i, j) -> i-j + N
char downdiag[2*MAXN] = {0};
//A single integer N (6 <= N <= 13) that is the dimension of the N x N checkerboard
short num = 0;
//Count the solution‘s number.
int counter = 0;
//Record the printed solutions‘ number
char print_solution_num = 0;
ofstream fout("checker.out");
void PrintSolution(){
short i = 0;
for(; i fout< }
fout<}
void DFS(short row, short column){
//Mark placement
row_record[row] = column;
col_mark[column]++;
updiag[row+column]++;
downdiag[row-column+num]++;
//increase row
row++;
if(row >= num){
counter++;
if(print_solution_num <3){
print_solution_num++;
PrintSolution();
}
return;
}
for(short column_1 = 0; column_1 //check
if(!col_mark[column_1] && !updiag[row+column_1] && !downdiag[row-column_1+num]){
DFS(row,column_1);
//Unmark placement
col_mark[column_1]--;
updiag[row+column_1]--;
downdiag[row-column_1+num]--;
}
}
}
int main(){
// clock_t t;
// t = clock();
ifstream fin("checker.in");
fin >> num;
//num == 6 is a special case, because the its first (num/2)-1 placement‘s solution is 2,that
//can‘t pirnt 3 solutions.
if(num == 6){
for(short column = 0; column DFS(0,column);
//Unmark the placement
col_mark[column]--;
updiag[0+column]--;
downdiag[0-column+num]--;
}
fout < return 0;
}
short half_num = num/2;
for(short column = 0; column DFS(0,column);
//Unmark the placement
col_mark[column]--;
updiag[0+column]--;
downdiag[0-column+num]--;
}
if(num%2 == 0)
fout < else{
int cur_counter = counter;
counter = 0;
DFS(0,half_num);
cur_counter = cur_counter*2 + counter;
fout < }
// t = clock() - t;
// cout<<"Comsume time: "<<((float)t)/CLOCKS_PER_SEC < return 0;
}


推荐阅读
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 本文详细探讨了 PHP 中 method_exists() 和 is_callable() 函数的区别,帮助开发者更好地理解和使用这两个函数。文章不仅解释了它们的功能差异,还提供了代码示例和应用场景的分析。 ... [详细]
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 本文详细介绍了如何解决 Microsoft SQL Server 中用户 'sa' 登录失败的问题。错误代码为 18470,提示该帐户已被禁用。我们将通过 Windows 身份验证方式登录,并启用 'sa' 帐户以恢复其访问权限。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍了一种高效的算法——线性筛法,用于快速筛选出一定范围内的所有素数。通过该方法,可以显著提高求解素数问题的效率。 ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • Python notes
    6.1.1.执行模块当你用下面的方式运行一个Python模块pythonfibo.py模块中的代码将会被执行,就像导入它一样,不过此时__name__被设置为__main__。 ... [详细]
  • 本文探讨了过度依赖咖啡对生物钟的影响,以及如何合理划分学习和娱乐时间。通过反思,我们认识到即使是快乐的事情也需要适度,培养兴趣爱好应注重沉浸感和心流体验。文章还提供了一些具体的调整建议。 ... [详细]
  • 解决Spring Boot项目创建失败的问题
    在尝试创建新的Spring Boot项目时遇到了一些问题,具体表现为在项目创建过程中的两个关键步骤出现错误。本文将详细探讨这些问题及其解决方案。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文详细解释了涨停板交易(俗称“打板”)的定义、操作步骤及注意事项。涨停板交易是一种高风险高回报的投资策略,尤其在牛市中表现出色。文中不仅介绍了如何选择和买入涨停股票,还提供了三大纪律以规避风险。 ... [详细]
  • Shell脚本中变量操作详解
    本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 本文旨在回顾并总结近期学习的.NET Core基础知识,通过具体的操作指南加深理解,并为初学者提供实用建议,避免常见的错误和陷阱。内容涵盖CentOS的安装配置、.NET Core环境搭建及网站部署等。 ... [详细]
author-avatar
手机用户2502854251
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有