标签:1320 int rx 初赛 蓝桥 vis cy cx &&
1320: [蓝桥杯2017初赛]方格分割
主要是思维啦
由于切割后两部分要对称,切割线总会经过整个方块的中心点(3,3),从中心点出发,只需要遍历找到半条分割线,一旦走到边界点即分隔出一种,一条路结束。
但由于dfs是一条路走到黑,设置vis时要将对称点也设置成1,
走一条路的时候要在从这点出发前将这点设为走过,结束这条路之后再回溯消除前一条路走过的痕迹
#include<iostream>
#include<string.h>
using namespace std;
int vis[10][10];
int cnt=0;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
bool inside(int x,int y){
if(x>=0&&x<=6&&y>=0&&y<=6)return true;
else return false;
}
void dfs(int x,int y){
if(x==0||x==6||y==0||y==6){
cnt++;
return;
}
for(int i=0;i<4;i++){
int cx=x+dx[i];
int cy=y+dy[i];
int rx=6-cx;//对称的点
int ry=6-cy;
if(inside(cx,cy)&&!vis[cx][cy]){//对称设置vis成1的,判断一个就好
vis[cx][cy]=1; vis[rx][ry]=1;
dfs(cx,cy);
vis[cx][cy]=0; vis[rx][ry]=0;
}
}
}
int main(){
memset(vis,0,sizeof(vis));
vis[3][3]=1;
dfs(3,3);
cout<<cnt/4;
return 0;
}
标签:1320,int,rx,初赛,蓝桥,vis,cy,cx,&& 来源: https://blog.csdn.net/qq_51070956/article/details/122715582
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。