POJ 3278 Catch That Cow

Catch That Cow

描述:简单的BFS,将位置和步数代入进一个结构体中(方便),queue,老套的visited数组。

#include<iostream>
#include<queue>
#include<cstring>
#define maxn 100010

using namespace std;
int visited[maxn];
struct step{
	int x;
	int steps;
	step(int xx,int ss):x(xx),steps(ss){}
};
queue<step> q;
int n,k;

int main(){
	while(cin>>n>>k){
		memset(visited,0,sizeof(visited));
		q.push(step(n,0));
		visited[n]=1;
		while(!q.empty()){
			step curs=q.front();
			if(curs.x==k){
				cout<<curs.steps<<endl;
			}
			if(curs.x-1>=0&&!visited[curs.x-1]){
				q.push(step(curs.x-1,curs.steps+1));
				visited[curs.x-1]=1;}
			if(curs.x+1<=maxn&&!visited[curs.x+1]){
				q.push(step(curs.x+1,curs.steps+1));
				visited[curs.x+1]=1;}
			if(curs.x*2<=maxn&&!visited[curs.x*2]){
				q.push(step(curs.x*2,curs.steps+1));
				visited[curs.x*2]=1;}
			q.pop();
		}
		return 0;
	}
	
	
}

另:BFS模板

#include<stdio.h>  
#include<string.h>  
#define MAX 6  
  
int matrix[MAX][MAX];  
  
void BFS(){  
    int queue[6]={0};  
    int visited[MAX]={0};  
    int head=0;  
    int tail=0;  
    //出队把head往上移一格  
    //插入一个tail往上移一格  
    queue[tail++]=start;//入队  
    visited[start]=1;  
    while(head!=tail){  
        //出队  
        int v=queue[head++];  
        printf("%d\n",v+1);  
        for(int i=0;i<MAX;i++){  
            if(matrix[v][i]==1){  
                if(visited[i]==0){  
                    //入队  
                    queue[tail++]=i;  
                    visited[i]=1;  
                }  
            }  
        }  
    }  
}  
  
int main(){  
    freopen("data.txt","r",stdin);  
    for(int i=0;i<MAX;i++){  
        for(int j=0;j<MAX;j++){  
            scanf("%d",&matrix[i][j]);  
        }  
    }  
    BFS(0);  
    return 0;  
}  

点赞