⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 farm.cpp

📁 一农场由图所示的十一种小方块组成
💻 CPP
字号:
#include <stdio.h>
#include <iostream.h>
/*一农场由图所示的十一种小方块组成,蓝色线条为灌溉渠。若相邻两块的灌溉渠相连则只需一口水井灌溉。
给出若干由字母表示的最大不超过50×50具体由(m,n)表示,
的农场图,编程求出最小需要打的井数。每个测例的输出占一行。当M=N=-1时结束程序。
*/

typedef struct node  
{
	int up;
	int right;
	int left;
	int down;
	int color;
}node;
node a[50][50];
int row,col;
int currentnum=0;//用于记录当前输入
int testnum=0;//用于记录第几组数据
int farm;
void  readdata(){//读入数据,对11种情况的初始化工作
	currentnum=0;
	
	char k;
	for(int i=0;i<row;i++)
		for(int j=0;j<col;j++){
			cin>>k;
			switch (k)
			{
			case 'A':
				a[i][j].up=1;
				a[i][j].right=0;
				a[i][j].down=0;
				a[i][j].left=1;
				a[i][j].color=0;
				break;
			case 'B':
				a[i][j].up=1;
				a[i][j].right=1;
				a[i][j].down=0;
				a[i][j].left=0;
				a[i][j].color=0;
				break;
			case 'C':
				a[i][j].up=0;
				a[i][j].right=0;
				a[i][j].down=1;
				a[i][j].left=1;
				a[i][j].color=0;
				break;
			case 'D':
				a[i][j].up=0;
				a[i][j].right=1;
				a[i][j].down=1;
				a[i][j].left=0;
				a[i][j].color=0;
				break;
			case 'E':
				a[i][j].up=1;
				a[i][j].right=0;
				a[i][j].down=1;
				a[i][j].left=0;
				a[i][j].color=0;
				break;
			case 'F':
				a[i][j].up=0;
				a[i][j].right=1;
				a[i][j].down=0;
				a[i][j].left=1;
				a[i][j].color=0;
				break;
				
			case 'G':
				a[i][j].up=1;
				a[i][j].right=1;
				a[i][j].down=0;
				a[i][j].left=1;
				a[i][j].color=0;
				break;
			case 'H':
				a[i][j].up=1;
				a[i][j].right=0;
				a[i][j].down=1;
				a[i][j].left=1;
				a[i][j].color=0;
				break;
			case 'I':
				a[i][j].up=0;
				a[i][j].right=1;
				a[i][j].down=1;
				a[i][j].left=1;
				a[i][j].color=0;
				break;
			case 'J':
				a[i][j].up=1;
				a[i][j].right=1;
				a[i][j].down=1;
				a[i][j].left=0;
				a[i][j].color=0;
				break;
			case 'K':
				a[i][j].up=1;
				a[i][j].right=1;
				a[i][j].down=1;
				a[i][j].left=1;
				a[i][j].color=0;
				break;
			}
			
			
			
			
		}
}



void search(int m,int n){
	a[m][n].color=currentnum;
	
	if(a[m-1][n].color==0&&m>0&&a[m][n].up==1&&a[m-1][n].down==1)//向上
		search(m-1,n);
	
	if(a[m][n+1].color==0&&n<col&&a[m][n].right==1&&a[m][n+1].left==1)//向右
		search(m,n+1);
	
	if(a[m+1][n].color==0&&m<row&&a[m][n].down==1&&a[m+1][n].up==1)//向下
		search(m+1,n);
	
	if(a[m][n-1].color==0&&n>0&&a[m][n].left==1&&a[m][n-1].right==1)//向左
		search(m,n-1);
	
}


void printresult(){
/*	printf("\n");
	for(int i=0;i<row;i++){
		for(int j=0;j<col;j++)
			printf("%d ",a[i][j].color);
		printf("\n");}
*/	
	printf("%d\n",currentnum);
}


void main(){
	cin>>row;
	cin>>col;	
	while(row!=-1||col!=-1){
		readdata();	
		
		for(int i=0;i<row;i++)
			for(int j=0;j<col;j++)
				if(a[i][j].color==0){
					currentnum++;
					search(i,j);					
				}	
				
				printresult();
				cin>>row;
				cin>>col;
	}	
}
/*
3 3
3 3
A D C
F J K
I H E
2 2
D K
H F
3 3
A D C
F J K
I H E
2 2
D K
H F
3 3
A A C
F J K
I H E
-1 -1

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -