1 条题解

  • 0
    @ 2022-11-5 18:33:44

    疫情流调

    很基础的二维数组应用,如果二人有交集就把a[x][y]和a[y][x]都标记为1。本蘜蒻比较头疼的是输出+查重,这一部分实现的有点乱,凑合看看就好。

    上代码

    #include<bits/stdc++.h>
    using namespace std;
    bool a[105][105],pd[105],jl[105];
    int n,m;
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=m;i++)
    	{
    		int x,y;
    		cin>>x>>y;
    		a[x][y]=1;
    		a[y][x]=1;
    	}
    	
    	for(int i=1;i<=n;i++)
    		if(a[1][i]==1)
    		{
    			pd[i]=1;
    			cout<<i<<" ";
    		}//先输出密接,标记为已经输出过 
    		
    	for(int i=1;i<=n;i++)
    	{
    		if(a[1][i]==1)  //如果当前的i为密接 
    		{
    			for(int j=2;j<=n;j++)  //从2开始查找次密接(题目中说不需要输出1) 
    				if((a[i][j]==1)&&(pd[j]==0))
    				{//如果有接触并且没有被标记过 
    					pd[j]=1;//标记为已经使用(当然这一行应该可以不要) 
    					jl[j]=1;//jl数组用于存放次密接,使用计数排序的思路,便于输出 
    				}
    		}
    	}
    	cout<<'\n';
    	for(int j=2;j<=n;j++)
    		if(jl[j]==1)
    			cout<<j<<" ";  //输出次密接 
        return 0;
    }
    
    

    信息

    ID
    1128
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    41
    已通过
    20
    上传者