欢迎光临散文网 会员登陆 & 注册

笔记

2023-09-12 13:27 作者:泽-吾愿之  | 我要投稿

#include<bits/stdc++.h>

using namespace std;

int n,m,a[100][100],sum=1; 

int dx[5]={0,0,1,0,-1};//行 

int dy[5]={0,1,0,-1,0};//列

bool check(int x,int y){//检查是否超界 

return x>0&&x<=n&&y>0&&y<=m;

}

void print(){//输出a数组 

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

for(int j=1;j<=m;j++){

cout<<setw(3)<<a[i][j]; 

cout<<endl;

}

}

void dfs(int x,int y){//深度优先搜索 

if(sum==n*m){//递归出口,检查是否到了尽头 

return;

}

for(int i=1;i<=4;i++){//循环四个方向是否可走 

int tx=x+dx[i];//每个方向的新坐标 

int ty=y+dy[i];

if(a[tx][ty]==0&&check(tx,ty)){//判断是否可走 

sum++;//填新数 

a[tx][ty]=sum;

dfs(tx,ty);//继续按四方向规则探索 

}

}

}

int main() {//主程序

cin>>n>>m;

a[1][1]=1;

dfs(1,1);

print();

return 0;

}


笔记的评论 (共 条)

分享到微博请遵守国家法律