IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 暑假学习记录7.23 -> 正文阅读

[数据结构与算法]暑假学习记录7.23

??????? 这两天学的是广搜(bfs),做的题挺少的,到现在还没做完习题,只能说是现在遇到广搜的题有了点大概的思路,下面记录一下自己做的题(重复题型的就不记录了)。

hdu4460

https://acm.hdu.edu.cn/showproblem.php?pid=4460

题意看了好一阵子还是看不明白,可能是英语水平变垃圾了,最后看的题解才知道题目让求一个k,使得每个人都可以与别人构成朋友链,链子的长度不大于k。还是用bfs(毕竟做的是bfs专题嘛),对每个人都要搜一遍,重点是统计每个人的交友关系,验证每个人是否与别人是不是朋友,求出,满足条件的k。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<list>
#include<stack>
#include<set>
#define ll long long
#define CHECK(x,y,z) (x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c&&!(vis[x][y][z])&&val[x][y][z])
//#include<bits/stdc++.h>
using namespace std;
vector<int>v[1015];
map<string,int>mp;
int f,ans,vis[1010];
int n,m;
void bfs(int x){
    if(!f) return;
    queue<int>q;
    memset(vis,-1,sizeof(vis));
    q.push(x);
    vis[x]=0;
    while(!q.empty()){
        int y=q.front();
        q.pop();
        if(vis[y]>ans){//求ans
            ans=vis[y];
            if(ans>6){
                f=0;
                return;
            }
        }
        for(int i=0;i<v[y].size();i++){
            if(vis[v[y][i]]==-1){
                vis[v[y][i]]=vis[y]+1;//记录每个人的交友情况
                q.push(v[y][i]);
            }
        }

    }
    for(int i=0;i<n;i++){
            if(vis[i]==-1){
                f=0;return;
            }
        }
}
int main(){
//  freopen("in.txt","r",stdin);

string s,s1,s2;
while(cin>>n&&n){
    for(int i=0;i<n;i++){
    cin>>s;
    mp[s]=i;
}
cin>>m;
for(int i=0;i<m;i++){
    cin>>s1>>s2;
    v[mp[s1]].push_back(mp[s2]);//用map将字符串转化为数字便于统计
    v[mp[s2]].push_back(mp[s1]);
}
        ans=0,f=1;
        for(int i=0;i<n;i++){
            bfs(i);
        }
        if(!f) cout<<-1<<endl;
        else cout<<ans<<endl;
        for(int i=0;i<n;i++) v[i].clear();
}
return 0;
}

poj3278

http://poj.org/problem?id=3278

? 思路还是很清晰的,但是我发现我竟然不会打。。。明明这个题很简单 Orz,famer只有三种选择位置+1,-1或*2,所以根据这三种情况来广搜就行,但是在记录步数和标记已走过的位置时我有点不会打了,最后还是看的题解才恍然大悟,可恶啊,继续加油,淦!

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<list>
#include<stack>
#include<set>
#define ll long long
#define CHECK(x,y,z) (x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c&&!(vis[x][y][z])&&val[x][y][z])
//#include<bits/stdc++.h>
using namespace std;
int n,k,a[100010];
void bfs(int n,int k){
memset(a,0,sizeof(a));
queue<int>q;
q.push(n);
a[n]=0;
bool vis[100010];
memset(vis,0,sizeof(vis));
vis[n]=1;
int fir,sec;
while(!q.empty()){
        fir=q.front();
      //  cout<<fir<<endl;
        q.pop();
        for(int i=0;i<3;i++){
            if(i==0) sec=fir+1;
            if(i==1) sec=fir-1;
            if(i==2) sec=fir*2;
            if(sec>=0&&sec<=100000&&(!vis[sec])){
                a[sec]=a[fir]+1;
                q.push(sec);
                vis[sec]=1;
            }

            if(sec==k){
                 cout<<a[sec]<<endl;
                 return;
            }
        }
}}
int main(){
 // freopen("in.txt","r",stdin);
cin>>n>>k;
if(n>=k){
    cout<<n-k<<endl;
}
else bfs(n,k);
return 0;
}

poj1426

http://poj.org/problem?id=1426

m是1和0组成的十进制的数,那么bfs就是两个方向,从1开始,逐次*10或*10+1,直到搜出最后结果,感觉这是一道很简单的题,但是c++编译器就是不给我过!,用G++一下子就过了,这是第一道自己做出来的搜索题,泪目了,看来是时候吃根冰棍庆祝一下了!另外看的别人的代码发现深搜c++也可以过,等学了深搜后再来看一遍。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<list>
#include<stack>
#include<set>
#define ll long long
#define CHECK(x,y,z) (x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c&&!(vis[x][y][z])&&val[x][y][z])
//#include<bits/stdc++.h>
using namespace std;
ll n;
void bfs(ll n){
    queue<ll>q;
    ll m;
    q.push(1);
    while(!q.empty()){
        m=q.front();
        q.pop();
        if(m%n==0){
            cout<<m<<endl;
            return;
        }
        q.push(m*10);
        q.push(m*10+1);
    }
}
int main(){
 // freopen("in.txt","r",stdin);
while(cin>>n&&n>0&&n<=200){
    bfs(n);
}
return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:44:57  更:2021-07-24 11:46:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:40:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码