首页 > 代码库 > ACM1198Farm Irrigation
ACM1198Farm Irrigation
这个题目好吓人呀!嘿嘿---
不过仔细分析下就可以啦!
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int N=550; 5 int Gra[11][4]={ 6 {1,0,0,1},{1,1,0,0},{0,0,1,1},{0,1,1,0}, 7 {1,0,1,0},{0,1,0,1},{1,1,0,1}, 8 {1,0,1,1},{0,1,1,1},{1,1,1,0},{1,1,1,1}}; 9 int direction[4][2]={{-1,0},{0,1},{1,0},{0,-1}};10 //11种铸造方式,1为开,0为关11 //用输入的大写字母减去‘A‘ 即可12 //2和下面的0可相加13 //3->1;0->2;1->3; 14 int m,n;//m lines and n characters15 int map[N][N];16 int vis[N][N];17 void dfs(int x,int y)18 {19 vis[x][y]=1;20 for(int i=0;i<4;i++) 21 {22 int X=x+direction[i][0];23 int Y=y+direction[i][1];24 int j=(i>=2)?(i-2):(i+2);//顺序绝对不可以改,或者要改一起改,有点变动就是wrong 25 if(Gra[map[x][y]][i]&&0<X&&X<=m&&0<Y&&Y<=n)26 {27 if(!vis[X][Y]&&Gra[map[X][Y]][j])28 dfs(X,Y);29 }30 }31 }32 int main()33 {34 char ch[N];35 while(cin>>m>>n)36 {37 if(m<0||n<0)break;//exit;38 memset(vis,0,sizeof(vis));39 for(int i=1;i<=m;i++)40 {41 cin>>ch;42 for(int j=0;j<n;j++)43 map[i][j+1]=ch[j]-‘A‘;44 }45 int count=0;46 for(int i=1;i<=m;i++)47 {48 for(int j=1;j<=n;j++)49 if(!vis[i][j])50 dfs(i,j),count++;51 }52 cout<<count<<endl;53 }54 return 0;55 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。