DAY8
2025-07-29 20:25:28
发布于:浙江
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 10001;
int a[MAXN]; // 存放当前排列的数组
bool b[MAXN]; // 标记数字是否被使用过
int n, r; // n 个整数,取 r 个数进行排列
// 深度优先搜索函数
void dfs(int t) {
if (t>r) { // 判断是否已经找到一个排列
// 输出当前排列
for (int i = 1; i <= r; i++) {
if (i == r) {
cout << a[i];
} else {
cout << a[i] << " ";
}
}
cout << "\n";
return;
}
for (int i = 1; i <= n; i++) {
if (!b[i]) { // 判断当前数字 i 是否可用
b[i] = true;
a[t] = i; // 将当前数字 i 放入第 t 个位置
dfs(t + 1); // 递归搜索下一层
b[i] = false; // 恢复状态,尝试其他可能性
}
}
}
int main() {
freopen("ka.in","r",stdin);
freopen("ka.out","w",stdout);
cin >> n >> r;
dfs(1); // 从第一个位置开始搜索
fclose(stdin);
fclose(stdout);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
bool vis[9][9]; //定义vis数组,vis[i][j]标记(i,j)是否被访问过
bool MAP[9][9]; //定义MAP数组,MAP[i][j]=false表示不是障碍物 MAP[i][j]=true是障碍物
int n,m,t,ans,sx,sy,fx,fy;//定义n,m,t,ans,sx,sy,ex,ey
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; //定义方向数组
void dfs(int x, int y) {//定义函数dfs(x,y)表示当前在(x,y)位置
if (x == fx && y == fy) { //判断是否x==fx且y==fy,判断是否到达终点
ans++;
return;
}
for (int i = 0; i < 4; i++) {//for循环遍历方向数组
int nx = x + dir[i][0];//求出邻居位置(nx,ny)
int ny = y + dir[i][1];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny] && !MAP[nx][ny]) {//判断邻居是否在地图内且没有被访问过且不是障碍物,如果成立就走过去
vis[nx][ny] = 1;//vis[nx][ny]=1,标记(nx,ny)访问过
dfs(nx, ny);
vis[nx][ny] = 0; // 回溯,恢复状态
}
}
}
int main() {
freopen("shuliang.in", "r", stdin);
freopen("shuliang.out", "w", stdout);
cin >> n >> m >> t;
cin >> sx >> sy >> fx >> fy;
for (int i = 0; i < t; i++) {
int x, y;
cin >> x >> y;
MAP[x][y] = true; // 标记障碍物
}
vis[sx][sy] = true;
dfs(sx, sy); //调用dfs(sx,sy),从(sx,sy)位置开始搜索
cout << ans;
fclose(stdin);
fclose(stdout);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n,a[15],b[15];
bool vis[15];
void dfs(int t){
if(t==n+1){
for(int i=1;i<=n;i++){
cout<<b[a[i]]<<" ";
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++){
if(vis[i]==0){
a[t]=i;
vis[i]=1;
dfs(t+1);
vis[i]=0;
}
}
}
int main(){
freopen("chou.in","r",stdin);
freopen("chou.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>b[i];
}
dfs(1);
fclose(stdin);
fclose(stdout);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
char mp[45][45];
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int n,m;
bool vis[45][45]={false};
int flag=0;
void dfs(int x,int y) {
if(x==n&&y==m) {
flag++;
return;
}
for(int i=0;i<4;i++) {
int nx=x+dir[i][0],ny=y+dir[i][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&mp[nx][ny]=='*'&&!vis[nx][ny]){
vis[nx][ny]=1;
dfs(nx,ny);
vis[nx][ny]=0;
}
}
}
int main() {
freopen("tanxian.in","r",stdin);
freopen("tanxian.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
cin>>mp[i][j];
}
}
vis[1][1]=1;
dfs(1,1);
cout<<flag;
fclose(stdin);
fclose(stdout);
return 0;
}
这里空空如也
有帮助,赞一个