7/24

边表邻接矩阵

#include<bits/stdc++.h>
using namespace std;

int n,m;
int v1,v2;
int a[105][105];

int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        cin>>v1>>v2;
        a[v1][v2]=1;
        a[v2][v1]=1;
    }
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            if(j==n){
                cout<<a[i][j];
            }
            else cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

图的概念

#include<bits/stdc++.h>
using namespace std;

int n,m;
int v1,v2;
int a[105][105];

int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        cin>>v1>>v2;
        a[v1][v2]=1;
        a[v2][v1]=1;
    }
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            if(j==n){
                cout<<a[i][j];
            }
            else cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

铲雪车问题

#include<bits/stdc++.h>
using namespace std;



int main(){
    long long x,y;
    long long a,b,c,d;
    double s=0;
    cin>>x>>y;
    while(cin>>a>>b>>c>>d){
        s+=sqrt((c-a)*(c-a)+(d-b)*(d-b));
    }
    double ans=s*2/1000/20;
    long long h=(long long)(ans);
    long long f=(long long)((ans-h)*60+0.5);
    printf("%lld:%02lld\n",h,f);
    return 0;
}

删边问题

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,m,a,b;
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        cin>>a>>b;
    }
    cout<<m-n+1<<endl;
    return 0;
}

走出迷宫

#include<bits/stdc++.h>
using namespace std;
char a[101][101];
int b[101][101];
int f[10001][4];
int x[]={0,0,-1,1};
int y[]={-1,1,0,0};
int n,m,bx,by,ex,ey;
void bfs(int x1,int y1)
{
    int begin=1,end=1;
    memset(b,0,sizeof(b));
    b[x1][y1]=1;
    f[begin][0]=x1;
    f[begin][1]=y1;
    f[begin][2]=0;
    end++;
    while(begin<end)
    {
        int x2=f[begin][0];
        int y2=f[begin][1];
        int ans=f[begin][2];
        if(x2==ex&&y2==ey)
        {
            cout<<ans<<endl;
            return;
        }
        for(int i=0;i<4;i++)
        {
            int x3=x2+x[i];
            int y3=y2+y[i];
            if(x3>=0&&y3>=0&&x3<n&&y3<m&&b[x3][y3]==0&&a[x3][y3]=='.')
            {
                b[x3][y3]=1;
                f[end][0]=x3;
                f[end][1]=y3;
                f[end][2]=ans+1;
                end++;
            }
        }
        begin++;
    }
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int k=0;k<m;k++)
        {
            cin>>a[i][k];
            if(a[i][k]=='S')
            {
                bx=i;
                by=k;    
            }
            if(a[i][k]=='T')
            {
                ex=i;
                ey=k;
                a[i][k]='.';
            }
        }
    }
    bfs(bx,by);
    return 0;
}

图的存储和遍历(未完成)

#include<bits/stdc++.h>
using namespace std;

int n,a[15][15];
bool d[1005];
bool vis[1005];
int g[15][15];

void dfs(int x){
    if(x<=n && a[x][x+1]!=0){
        cout<<x<<" ";
        d[x]=true;
        dfs(x+1);
        d[x]=false;
    }
}

void bfs(){
    memset(vis,0,sizeof(vis));
    queue<int> q;
    while(!q.empty())    q.pop();
    q.push(1);
    vis[1]=1;
    while(!q.empty()){    
        int h=q.front();
        q.pop();
        cout<<h<<" ";
        for(int i=1; i<=g[h][0]; i++){
            if(vis[g[h][i]]==0){
                q.push(g[h][i]);
                vis[g[h][i]]=1;
            }
        }
    }
}
int main(){
    int s=0;
    cin>>n;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            cin>>a[i][j];
        }
    }
    for(int i=1; i<=n; i++){
        cout<<i<<" ";
        for(int j=1; j<=n; j++){
            if(a[i][j]!=0){
                cout<<j<<" ";
            }
        }
        cout<<endl;
    }
    dfs(1);
    cout<<endl;
    bfs();
    cout<<endl;
    return 0;
}

细胞

#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;
}

 

posted @ 2023-07-24 11:00  竹余居居居居居  阅读(49)  评论(1)    收藏  举报