栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

牛客入门题单:搜索与搜索剪枝

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

牛客入门题单:搜索与搜索剪枝

搜索与搜索剪枝

牛客网 2021秋季算法入门班第六章习题:搜索与搜索剪枝

1001 全排列

DFS 回溯

#include 
using namespace std;

bool is[10] = {0} ;
int path[10];

void dfs(int n){
    if(n == 8){
        for(int i = 0 ; i < 8 ; i ++){
            cout << path[i] << " " ;
        }
        cout << endl ;
    }
    
    for(int i = 1 ; i <= 8 ; i ++ ){
        if(!is[i]){
            path[n] = i ; 
            is[i] = true ;
            dfs(n + 1);
            is[i] = false ;
        }
    }
}

int main(){
    dfs(0);
    return 0 ;
}
1002 走出迷宫
#include
using namespace std;

int main(){
    vector> direction = {{1,0},{-1,0},{0,1},{0,-1}} ;
    char ma[501][501] ;
    queue> que ;
    int visit[501][501] ;
    memset(visit, 0, sizeof(visit)); // init
    int n , m ;
    while(cin >> n >> m){
            for(int i = 0 ; i < n ; i ++){
                for(int j = 0 ; j < m ; j ++){
                    cin >> ma[i][j] ;
                    if(ma[i][j] == 'S'){
                        que.push({i , j});
                        visit[i][j] = 1 ;
                    }
                }
            }
        while(!que.empty()){
            auto preque = que.front();
            que.pop();
            int x = preque.first , y = preque.second ;
            for(int i = 0 ; i < 4 ; i ++){
                int prex = direction[i][0] + x , prey = direction[i][1] + y ;
                if(prex >= 0 && prex < n && prey >= 0 && prey < m && ma[prex][prey] == '.' && visit[prex][prey] == 0){
                    que.push({prex , prey});
                    visit[prex][prey] = 1 ;
                }
                if(ma[prex][prey] == 'E'){
                    cout << "Yes" << endl;
                }
            }
        }

        cout << "No" << endl;
    }
    return 0 ;
}

由于有多组输入,所以用 while 输入,不然会在第一组数据回城。

过了 75% 用例

#include
using namespace std;

int main(){
    vector> direction = {{1,0},{-1,0},{0,1},{0,-1}} ;
    char ma[501][501] ;
    queue> que ;
    int visit[501][501] ;
    memset(visit, 0, sizeof(visit)); // init
    int n , m ;
    while(cin >> n >> m){
        int flag = 0 ;
            for(int i = 0 ; i < n ; i ++){
                for(int j = 0 ; j < m ; j ++){
                    cin >> ma[i][j] ;
                    if(ma[i][j] == 'S'){
                        que.push({i , j});
                        visit[i][j] = 1 ;
                    }
                }
            }
        while(!que.empty()){
            auto preque = que.front();
            que.pop();
            int x = preque.first , y = preque.second ;
            for(int i = 0 ; i < 4 ; i ++){
                int prex = direction[i][0] + x , prey = direction[i][1] + y ;
                if(prex >= 0 && prex < n && prey >= 0 && prey < m && ma[prex][prey] == '.' && visit[prex][prey] == 0){
                    que.push({prex , prey});
                    visit[prex][prey] = 1 ;
                }
                if(ma[prex][prey] == 'E'){
                    flag = 1 ;
                }
                if(flag == 1) break ;
            }
        }
        if(flag == 1) cout << "Yes" << endl ;
        else cout << "No" << endl;
    }
    return 0 ;
}

AC

#include 
using namespace std;
char mp[501][501];
int _next[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int visit[501][501];
void init(){
    memset(visit,0,sizeof(visit));
}
 
int main(){
    int n,m;
    while(cin>>n>>m){
        int bx,by;
        for(int i=0;i>mp[i][j];
                if(mp[i][j]=='S'){
                    bx=i;
                    by=j;
                }
            }
        }
        //cout<>q;
        q.push(make_pair(bx,by));
        visit[bx][by]=1;
        int flag=0;
        while(!q.empty()){
            pairx=q.front();
             
            q.pop();
            for(int i=0;i<4;i++){
                int c=x.first+_next[i][0];
                int d=x.second+_next[i][1];
                if(c=0&&d>=0&&mp[c][d]=='.'&&!visit[c][d]){
                    q.push(make_pair(c,d));
                    visit[c][d]=1;
                }
                if(c=0&&d>=0&&mp[c][d]=='E'){
                    flag=1;
                    break;
                }
            }  
            if(flag==1){
                break;
            }      
        }
        if(flag==1){
            cout<<"Yes"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/722926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号