练习

//图的存储与遍历 
#include<bits/stdc++.h>
using namespace std;
vector<int> g[11];
queue<int> f;
int vis[101],visw[101];
int a[11][11];
void dfs(int x){
    vis[x]=true;
    cout<<x<<" ";
    for(int i=0; i<g[x].size(); i++){
        int c=g[x][i];
        if(!vis[c]) dfs(c);
    }
}
void bfs(int y){
    f.push(y);
    visw[y]=true;
    while(!f.empty()){
        y=f.front();
        cout<<y<<" ";
        f.pop();
        for(int i=0; i<g[y].size(); i++){
            int l=g[y][i];
            if(!visw[l]){
                f.push(l);
                visw[l]=true;
            }
        }
    }
}
int main(){
    int n;
    cin>>n;
    for(int i=1; i<=n; i++){
        for(int k=1; k<=n; k++){
            cin>>a[i][k];
            if(a[i][k]==1) g[i].push_back(k);
        }
    }
    for(int i=1; i<=n; i++){
        cout<<i<<" ";
        for(int k=0; k<g[i].size();k++){
            cout<<g[i][k]<<" ";
        }
        cout<<endl;
    }
    for(int i=1; i<=n; i++) if(!vis[i]) dfs(i);
    cout<<endl;
    for(int i=1; i<=n; i++) if(!visw[i]) bfs(i);
    return 0;
}
//sixdeg
#include<bits/stdc++.h>
using namespace std;
vector<int> g[1001];
queue<int> f;
int visw[1001],maxn,sy[1001]={0},maxs=0;
int a[11][11];
void bfs(int y){
    f.push(y);
    visw[y]=true;
    while(!f.empty()){
        y=f.front();
        f.pop();
        for(int i=0; i<g[y].size(); i++){
            int l=g[y][i];
            if(!visw[l]){
                sy[l]=sy[y]+1;
                maxs=max(maxs,sy[l]);
                f.push(l);
                visw[l]=true;
            }
        }
    }
}
int main(){
    int c,p;
    cin>>c>>p;
    for(int i=1; i<=p; i++){
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    bfs(1);
    cout<<maxs;
    return 0;
}
//拓扑排序 
#include<bits/stdc++.h>
using namespace std;
int n,m,d[1005]; 
priority_queue<int,vector<int>,greater<int> > q;
vector<int> g[1005],ans;
int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
        d[y]++;
    }
    for(int i=1; i<=n; i++){
        if(d[i]==0) q.push(i);
    }
    while(!q.empty()){
        int f=q.top();
        q.pop();
        ans.push_back(f);
        for(int i=0; i<g[f].size(); i++){
            int t=g[f][i];
            d[t]--;
            if(d[t]==0) q.push(t);
        }
    }
    if(ans.size()!=n) {
        cout<<-1<<endl;
        return 0;
    }
    for(int i=0; i<ans.size(); i++) cout<<ans[i]<<" ";
    return 0;
}
//骑马修栅栏 
#include<bits/stdc++.h>
using namespace std;
int mp[505][505];
int du[505];
int path[1030],k;
int f,minn=INT_MAX,maxn=0,a,b;
void dfs(int x){
    for(int i=minn; i<=maxn; i++){
        if(mp[x][i]){
            mp[x][i]--;mp[i][x]--;
            dfs(i);
        }
    }
    path[k++]=x;
}
int main(){
    cin>>f;
    for(int i=1; i<=f; i++){
        cin>>a>>b;
        mp[a][b]++;mp[b][a]++;
        du[a]++;du[b]++;
        minn=min(minn,min(a,b));
        maxn=max(maxn,max(a,b));
    }
    int start=minn;
    for(int i=minn; i<=maxn; i++){
        if(du[i]%2){
            start=i;
            break;
        }
    }
    dfs(start);
    for(int i=k-1; i>=0; i--) cout<<path[i]<<endl;
    return 0;
}
//传话 
#include<bits/stdc++.h>
using namespace std;
int l[1001][10001];
int n,m,a,b,t;
bool v[1001],huan[1001];
void dfs(int x){
    if(huan[t]) return ;
    v[x]=1;
    if(x==t){
        huan[t]=1;
        return ;
    }
    for(int i=1;i<=l[x][0];i++)
        if(!v[l[x][i]]) dfs(l[x][i]);
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>a>>b;
        l[a][0]++;
        l[a][l[a][0]]=b;
    }   
    for(t=1;t<=n;t++){
        memset(v,0,sizeof(v));
        for(int i=1;i<=l[t][0];i++)
            dfs(l[t][i]);
    }    
    for(int i=1;i<=n;i++)
        if(huan[i]) cout<<"T"<<endl;
        else cout<<"F"<<endl;
    return 0;
}
//奖金 
#include<bits/stdc++.h>
using namespace std;
int a[10001][301]={0},into[10001],ans[10001],m,n,money;
void init(){
    int i,x,y;
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        cin>>x>>y;
        a[y][0]++;
        a[y][a[y][0]]=x;
        into[x]++;
    }
}
bool tops(){
    int t,tot=0,k=0,i,j;
    while(tot<n){
    t=0;
    for(i=1; i<=n; i++)
        if(into[i]==0){
            tot++;t++;money+=100;
            ans[t]=i;
            into[i]=0xfffffff;
        }
        if(t==0) return false;
        money+=k*t;k++;
        for(i=1; i<=t; i++)
            for(j=1; j<=a[ans[i]][0]; j++) into[a[ans[i]][j]]--;
        }
        return true;
    }
int main(){
    init(); money=0;
    if(tops()) cout<<money<<endl;
    else cout<<"Poor Xed"<<endl;
    return 0;
}

 

posted @ 2023-08-02 16:33  siuuuuuuuu  阅读(18)  评论(0)    收藏  举报