8/2上午

找路径

复制代码
#include<bits/stdc++.h>
using namespace std;

bool pp=false;
int n,m;
int a[1005][2],w[1005][1005];
bool d[1005];
int b[1005][1005];
int k[10005],x=0;

void dfs(int i,int wn,int dep){
    if(i==n){
        for(int z=1; z<dep; z++){
            cout<<k[z]<<" ";
        }
        pp=true;
        cout<<n<<" "<<wn<<endl;
        return ;
    }
    d[i]=true;
    k[dep]=i;
    for(int j=1; j<=n; j++){
        if(b[i][j]!=0 && d[j]==false){
            d[j]=true;
            dfs(j,wn+w[i][j],dep+1);
            d[j]=false;
        } 
    
    }
}

int main(){
    int yy;
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        cin>>a[i][1]>>a[i][2];
        cin>>yy;
        w[a[i][1]][a[i][2]]=yy;
        w[a[i][2]][a[i][1]]=yy;
        b[a[i][1]][a[i][2]]=1;
        b[a[i][2]][a[i][1]]=1;
    }
    dfs(1,0,1);
    if(pp==false){
        cout<<"-1"<<endl;
    }
    return 0;
}

/*5 5
1 2 4
2 4 5
4 5 1
2 5 3
1 5 10*/
复制代码

一笔画问题

复制代码
#include<bits/stdc++.h>
using namespace std;

bool pp=false;
int n,m,wn;
int a[1005][2],w[1005][1005];
bool d[1005];
int b[1005][1005];
int k[10005],x[1005];
int ss[10005],s;
int dep;

int dfs(int i){
    for(int j=1; j<=n; j++){
        if(b[i][j]!=0){
            b[i][j]=0;
            b[j][i]=0;
            dfs(j);
        } 
    
    }
    dep+=1;
    k[dep]=i;
    return 0;
}

int main(){
    int sr=1;
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        cin>>a[i][1]>>a[i][2];
        b[a[i][1]][a[i][2]]=1;
        b[a[i][2]][a[i][1]]=1;
        ss[a[i][1]]++;
        ss[a[i][2]]++;
    }
    for(int i=1; i<=n; i++){
        if(ss[i]%2!=0){
            s++; 
            x[sr]=i;
            sr++;
        } 
    }
    if(s==2){
        dfs(x[1]);
    }else if(s==0){
        dfs(1);
    }
    for(int i=dep; i>=1; i--){
        cout<<k[i]<<" ";
    }
    cout<<endl;
    return 0;
}
复制代码

骑马修栅栏(答案错误13%)

复制代码
#include<bits/stdc++.h>
using namespace std;

int m,n;
int a[1005][2];
bool d[1005];
int b[1005][1005];
int k[10005],x=0;
int s;
int dep=1;

int dfs(int i){
    for(int j=1; j<=n; j++){
        if(b[i][j]!=0){
            b[i][j]=0;
            b[j][i]=0;
            dfs(j);
        } 
    
    }
    k[dep]=i;
    dep++;
    return 0;
}

int main(){
    int yy;
    cin>>m;
    for(int i=1; i<=m; i++){
        cin>>a[i][1]>>a[i][2];
        n=max(n,a[i][1]);
        n=max(n,a[i][2]); 
        b[a[i][1]][a[i][2]]=1;
        b[a[i][2]][a[i][1]]=1;
    }
    dfs(1);
    for(int i=dep-1; i>=1; i--){
        cout<<k[i]%500<<endl;
    }
    return 0;
}
复制代码

63%

复制代码
#include<bits/stdc++.h>
using namespace std;

bool pp=false;
int n,m,wn;
int a[1005][2],w[1005][1005];
bool d[1005];
int b[1005][1005];
int k[10005],x[1005];
int ss[10005],s;
int dep;

int dfs(int i){
    for(int j=1; j<=n; j++){
        if(b[i][j]!=0){
            b[i][j]=0;
            b[j][i]=0;
            dfs(j);
        } 
    
    }
    dep+=1;
    k[dep]=i;
    return 0;
}

int main(){
    int sr=1;
    cin>>m;
    for(int i=1; i<=m; i++){
        cin>>a[i][1]>>a[i][2];
        n=max(n,a[i][1]);
        n=max(n,a[i][2]); 
        b[a[i][1]][a[i][2]]=1;
        b[a[i][2]][a[i][1]]=1;
        ss[a[i][1]]++;
        ss[a[i][2]]++;
    }
    for(int i=1; i<=n; i++){
        if(ss[i]%2!=0){
            s++; 
            x[sr]=i;
            sr++;
        } 
    }
    if(s==2){
        dfs(x[1]);
    }else if(s==0){
        dfs(1);
    }
    for(int i=dep; i>=1; i--){
        cout<<k[i]%500<<endl;
    }
    cout<<endl;
    return 0;
}
复制代码

 80%

复制代码
#include<bits/stdc++.h>
using namespace std;

bool pp=false;
int n,m,wn;
int a[1005][2],w[1005][1005];
bool d[1005];
int b[1005][1005];
int k[10005],x[1005];
int ss[10005],s;
int dep;

void dfs(int i){
    for(int j=1; j<=n; j++){
        if(b[i][j]){
            b[i][j]--;
            b[j][i]--;
            dfs(j);
        } 
    
    }
    k[dep++]=i;
}

int main(){
    int sr=1;
    cin>>m;
    for(int i=1; i<=m; i++){
        cin>>a[i][1]>>a[i][2];
        n=max(n,a[i][1]);
        n=max(n,a[i][2]); 
        b[a[i][1]][a[i][2]]++;
        b[a[i][2]][a[i][1]]++;
        ss[a[i][1]]++;
        ss[a[i][2]]++;
    }
    for(int i=1; i<=n; i++){
        if(ss[i]%2!=0){
            s++; 
            x[sr]=i;
            sr++;
        } 
    }
    if(s==2){
        dfs(x[1]);
    }else if(s==0){
        dfs(1);
    }
    for(int i=dep; i>=1; i--){
        cout<<k[i]%500<<endl;
    }
    return 0;
}
复制代码

100%

复制代码
#include<bits/stdc++.h>
using namespace std;
#define N 1000+1
int w[N][N],n,du[N],maxx,ans[N],tot;
void dfs(int x)
{//不知道为什么在这里记录答案会错掉
    for(int i=1;i<=maxx;i++)
        if(w[x][i])
        {
            w[x][i]--;
            w[i][x]--;
            dfs(i);
        }
    ans[++tot]=x;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x,y;
        cin>>x>>y;
        w[x][y]++;
        w[y][x]++;
        du[x]++;
        du[y]++;
        maxx=max(maxx,max(x,y));
    }
    int sta=0;
    for(int i=1;i<=maxx;i++)
        if(du[i]%2==1){
            sta=i;
            break;
        }
    if(sta==0)
    {
        for(int i=1;i<=maxx;i++)
            if(du[i])
            {
                sta=i;
                break;
            }
    }
    dfs(sta);
    for(int i=tot;i>=1;i--)
        cout<<ans[i]<<endl;
}
复制代码

 细胞

复制代码
#include<bits/stdc++.h>
using namespace std;

char ch[105][105];
int dir1[4]={0,1,0,-1};
int dir2[4]={1,0,-1,0};
bool vis[105][1005];
int q[1005][5];
int front,rear;
int cnt=0;
int r,c;
string s;

void bfs(int i,int j){
    front=rear=1;
    q[1][0]=i;
    q[1][1]=j;
    vis[i][j]=true;
    while (front<=rear){
        int x=q[front][0];
        int y=q[front][1];
        for(int k=0; k<4; k++){
            int nx=x+dir1[k];
            int ny=y+dir2[k];
            if(nx>=1 && nx<=r && ny>=1 && ny<=c && ch[nx][ny]!='0' && vis[nx][ny]==false){
                rear++;
                q[rear][0]=nx;
                q[rear][1]=ny;
                vis[nx][ny]=true;
            }
        }
        front++;
    }
}

int main(){
    cin>>r>>c;
    for(int i=1; i<=r; i++){
        for(int j=1; j<=c; j++){
            cin>>ch[i][j];
        }
    }
    for(int i=1; i<=r; i++){
        for(int j=1; j<=c; j++){
            if(ch[i][j]!='0' && vis[i][j]==false){
                bfs(i,j);
                cnt++; 
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}
复制代码

队列

复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,m,a[1005];
    cin>>n>>m;
    for(int i=1; i<=n; i++){
        cin>>a[i];
    }
    for(int i=n+1; i<=m+n; i++){
        cin>>a[i];
    }
    sort(a+1,a+m+n+1);
    for(int i=1; i<=m+n; i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;
    return 0;
}
复制代码

 未完成的传话

复制代码
#include<bits/stdc++.h>
using namespace std;

int n,m;
int a1,a2;
int a[1005][1005];

void dfs(int i){
    for(int j=1; j<=n; j++){
        if(a[i][j]==1){
            
        }
    }
}

int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        cin>>a1>>a2;
        a[a1][a2]=1;
        a[a2][a1]=1;
    }
    for(int i=1; i<=n; i++){
        dfs(i);
        if(f==true){
            cout<<"T"<<endl;
        }else cout<<"F"<<endl;
        f=false;
    }
    return 0;
}
复制代码

 

posted @   竹余居居居居居  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示