1 条题解

  • 0
    @ 2023-6-11 12:17:59

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    int a[1100][1100],n,c;
    int num[1100][1100]; 
    //车的方向数组 
    int d[8][2] = {{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,1},{1,-1}};
    
    //设置控制点
    void fun(int x,int y,int ox,int oy){
    	for(int i = 0;i < 8;i++){
    		while(x+d[i][0]>=1&&x+d[i][0]<=n&&y+d[i][1]>=1&&y+d[i][1]<=n&&a[x+d[i][0]][y+d[i][1]]==0){
    			num[x+d[i][0]][y+d[i][1]]++;
    			if(num[x+d[i][0]][y+d[i][1]] == 1) c++;
    			x=x+d[i][0];
    			y=y+d[i][1];
    		}
    		x=ox;
    		y=oy; 
    		
    		if(a[ox][oy] == 1 && i == 3) break;
    	}
    } 
     
    int main(){
    	/*
    	  思路:遍历每个点,如果该点是车或后则将所有可达点都走一遍并计数 
    	*/
    	int i,j;
    	cin>>n;
    	for(i = 1;i <= n;i++){
    		for(j = 1;j <= n;j++){
    			cin>>a[i][j];
    		}                    
    	}
    		                      
    	for(i = 1;i <= n;i++){
    		for(j = 1;j <= n;j++){
    			//车 
    			if(a[i][j] == 1 || a[i][j] == 2){
    				c++;
    				num[i][j]++;
    				fun(i,j,i,j);
    			}
    		}     
    	}
    	
    //	for(i = 1;i <= n;i++){
    //		for(j = 1;j <= n;j++){
    //			cout<<setw(5)<<num[i][j];
    //		}     
    //		cout<<endl;
    //	}
    	cout<<n * n - c<<endl;
    } 	
    
    
    • 1

    信息

    ID
    2448
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者