题目1834:蓝桥杯2016年第七届真题-路径之谜

#include<iostream>

using namespace std;

int n;

int a[20],b[20];//a自西向东的靶数,b自北向南的靶数

int arr[20][20];//格子

int vis[20][20];//标记是否访问过

int top;//栈顶

int stack[20];//存储路线的栈

int dx[4]={1,0,-1,0};//下左上右

int dy[4]={0,-1,0,1};//下左上右

bool check(){//检查靶子

for(int i=0;i<n;i++){

if(a[i]!=0||b[i]!=0){

return false;

}

}

return true;

}

void dfs(int x,int y,int step){

if(a[y]<0||b[x]<0){

return;

}

if(x==n-1&&y==n-1){//终止条件,到达最后一个格子

if(check()){

for(int i=0;i<top;i++){

cout<<stack[i]<<" ";

}

cout<<endl;

}

return;

}

for(int i=0;i<4;i++){

int tx,ty;

tx=x+dx[i];

ty=y+dy[i];

if(tx>=0&&tx<n&&ty>=0&&ty<n&&vis[tx][ty]==0){

vis[tx][ty]=1;

stack[top++]=arr[tx][ty];

a[ty]--;

b[tx]--;

dfs(tx,ty,step+1);

a[ty]++;

b[tx]++;

top--;//出栈

vis[tx][ty]=0;

}

}

}

int main(){

cin>>n;

for(int i=0;i<n;i++){

cin>>a[i];

}

for(int i=0;i<n;i++){

cin>>b[i];

}

for(int i=0,k=0;i<n;i++){

for(int j=0;j<n;j++){

arr[i][j]=k++;//为每个格子分配编号

}

}

vis[0][0]=1;

stack[0]=arr[0][0];

top=1;

a[0]--;

b[0]--;

dfs(0,0,1);

return 0;

}

相关推荐
2301_8008951016 小时前
第九届蓝桥杯国赛b组--备战国赛版h
蓝桥杯
郭老二16 小时前
【C++】RPC:远程程序调用
c++·rpc
承渊政道16 小时前
【贪心算法】(经典实战应用解析(六):整数替换、俄罗斯套娃信封问题、可被三整除的最⼤和、距离相等的条形码、重构字符串)
c++·算法·leetcode·贪心算法·排序算法·动态规划·哈希算法
宠..16 小时前
VS Code SSH 远程连接 Ubuntu 并实现快速运行(C/C++示例)
java·运维·c语言·开发语言·c++·ubuntu·ssh
WL_Aurora16 小时前
Python 算法基础篇之排序算法(二):希尔、快速、归并
python·算法·排序算法
闻缺陷则喜何志丹16 小时前
【图论 树 启发式合并】P7165 [COCI2020-2021#1] Papričice|普及+
c++·算法·启发式算法·图论··洛谷
alexwang21116 小时前
AT_abc458_d [ABC458D] Chalkboard Median题解
c++·算法·题解·atcoder
故事和你9116 小时前
洛谷-【图论2-4】连通性问题1
开发语言·数据结构·c++·算法·动态规划·图论
我先去打把游戏先16 小时前
Ubuntu虚拟机(服务器版本)Git安装教程(附常用命令)——从零开始掌握版本控制
服务器·c语言·c++·git·嵌入式硬件·物联网·ubuntu
周末也要写八哥16 小时前
算法实例分析:使数组相等的最小开销
算法