bfs和dfs

做了一道神水题bfs NYOJ 27

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int matrix[105][105];
int m,n;
int cnt ;
void bfs(int x,int y){
	if(matrix[x][y]==0) return ;
	matrix[x][y]=0;
	if(matrix[x-1][y]) bfs(x-1,y);
	if(matrix[x][y-1]) bfs(x,y-1);
	if(matrix[x+1][y]) bfs(x+1,y);
	if(matrix[x][y+1]) bfs(x,y+1);
}


int main(int argc, char const *argv[])
{
	int T;
	cin>>T;
	while(T--){
		cin>>m>>n;
		cnt = 0;
		memset(matrix,0,sizeof(matrix));
		for(int i = 1 ; i<=m ;i++){
			for(int j = 1 ; j <=n ;j++){
				cin>>matrix[i][j];
			}
		}
		
		for(int i = 1; i <= m ; i++){
			for(int j =1 ; j <= n ;j++){
			if(matrix[i][j]){
				cnt++;
				bfs(i,j);
				}
			}
		}
		cout<<cnt<<endl;
	}
	return 0;
}


dfs 素数环

hdoj 1016

#include <iostream>
using namespace std;
bool prime[45];
int num[22];
int isvisited[22];
int n;

void dfs(int pre,int post,int flag){
  if(!prime[pre+post]) return ;
  num[flag]=post;
  if(flag==n&&prime[1+post]){
    for(int i = 1 ; i <n;i++ )
      cout<<num[i]<<" ";
    cout<<num[n];
    cout<<endl;
    return ;
  }
  isvisited[post]=1;
  for(int j = 2; j <=n ;j++){
    if(isvisited[j]==0) dfs(post,j,flag+1) ;
  }
  isvisited[post]=0;
  return ;
}

int main(int argc, char const *argv[])
{
    for(int i = 3; i <45;i+=2)
      prime[i]=true;
    prime[2]=true;
    for(int i = 3;i<45;i++){
      if(prime[i]) 
        for(int j=2*i;j<45;j+=i)
         prime[j]=false; 
    }
    int cnt = 0;
    while(cin>>n){
      memset(isvisited,0,sizeof(isvisited));
      cnt++;
      cout<<"Case "<<cnt<<":"<<endl;
      num[1]=1;
      if(n==1) cout<<1<<endl;
      for(int j=2;j<=n;j++){
        dfs(1,j,2);
      } 
       cout<<endl;
    }
    return 0;
}


你可能感兴趣的:(bfs和dfs)