算法学习之路——深搜广搜

dfs模板:

#include <stdio.h>
int a[10],book[10]={0},n;
void dfs(int step)
{
int i;
if(step==n+1)
{
for(i=1;i<=n;i++)
printf("%d “,a[i]);
putchar(’\n’);
return;
}
else
{
for(i=1;i<=n;i++)
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
return;
}
int main()
{
scanf(”%d",&n);
dfs(1);
return 0;
}

bfs模板:

#include <bits/stdc++.h>
using namespace std;
struct queu{
 int x;
 int y;
};
int aa[32][32],head=1,tail=1,tx,ty;
int turn[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct queu que[1030];
int main()
{
 int n,i,j,k;
 scanf("%d",&n);
 for(i=0;i<=n+1;i++)
  for(j=0;j<=n+1;j++)
   aa[i][j]=2;
 for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
   scanf("%d",&aa[i][j]);
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=n;j++)
   if(aa[i][j]==1)
    break;
  if(aa[i][j]==1)
    break;
 }
     
 que[head].x=i+1;
 que[head].y=j+1;
 aa[i+1][j+1]=2;
 tail++;
 while(head<tail)
 {
  for(k=0;k<=3;k++)
  {
   tx=que[head].x+turn[k][0];
   ty=que[head].y+turn[k][1];
   if(tx>n||tx<1||ty>n||ty<1)
    continue;
   if(aa[tx][ty]==0)
   {
    aa[tx][ty]=2;
    que[tail].x=tx;
    que[tail].y=ty;
    tail++;
   }
    
  }
  head++;
 }
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=n;j++)
   printf("%d ",aa[i][j]);
  putchar(’\n’);
 }
  
 return 0;  
 
}

猜你喜欢

转载自blog.csdn.net/qq_43597036/article/details/87636798
今日推荐