求图像的周长
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
给一个用 . 和X表示的图形,图形在上、下、左、右、左上、左下、右上、右下8个方向都被看作是连通的,并且图像中间不会出现空洞,求这个图形的边长。
输入:
首先给出m、n、x、y四个正整数,下面给出m×n的图形,x、y表示点击的位置,全0表示结束。
输出:
点击的图形的周长。
输入样例:
2 2 2 2 XX XX 6 4 2 3 .XXX .XXX .XXX ...X ..X. X... 0 0 0 0
输出样例:
8
18
C++代码如下:
</pre>#include<iostream><br />using namespace std;<br />int R,C;//行列数<br />int num;<br />void search(char** a,int row,int col);<br />int canplace(char** a,int row,int col);<br />int result[1000];<br />int count=0;<br /><br /><br />int main()<br />{<br /> int x,y;<br /> cin>>R>>C>>x>>y;//行列数R,C点击位置(x,y)<br /> while(R!=0||C!=0||x!=0||y!=0)<br /> {<br /> char **Arr = new char*[R];//R行(动态的数组,a就是一个指针数组)<br /> for(int i=0;i<R;i++)<br /> Arr[i] = new char[C];//C列(a[i]:指向字符数组的指针)<br /> for(int j=0;j<R;j++)<br /> for(int k=0;k<C;k++)<br /> cin>>Arr[j][k]; //输入图像布局<br /> search(Arr,x-1,y-1);<br /> //cout<<num<<endl;<br /> result[count++]=num;<br /><br /><br /> for(int i=0;i<R;i++)<br /> delete Arr[i];//删除指针数组a中的指针<br /> delete Arr;//删除指针数组<br /> num=0;<br /> cin>>R>>C>>x>>y;//行列数m,n点击位置(x,y)<br /> }<br /> for(int i=0;i<count;i++){<br /> cout<<result[i]<<endl;<br /> }<br /> return 0;<br />}<br />int canplace(char** Arr,int row,int col)<br />{<br /> if(row>=0 &&col>=0 &&row<R &&col<C &&Arr[row][col]=='X')//未越界且可走通<br /> return 1;<br /> return 0;<br />}<br />void search(char**Arr,int row,int col)<br />{<br /> int r,c;<br /> if(row-1<0 ||(row-1>=0&&Arr[row-1][col]=='.')) num++;<br /> if(row+1>=R ||(row+1<R&&Arr[row+1][col]=='.' )) num++;<br /> if(col-1<0 ||(col-1>=0&&Arr[row][col-1]=='.')) num++;<br /> if(col+1>=C ||(col+1<C&&Arr[row][col+1]=='.' )) num++;<br /> Arr[row][col]='1';//对可走通的点进行标记<br /><br /><br /> r=row; c=col-1;//左<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br /> r=row+1; c=col;//下<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br /> r=row; c=col+1;//右<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br /> r=row-1; c=col;//上<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br /> r=row+1; c=col-1;//左下<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br /> r=row+1; c=col+1;//右下<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br /> r=row-1; c=col+1;//右上<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br /> r=row-1; c=col-1;//左上<br /> if(canplace(Arr,r,c))<br /> search(Arr,r,c);<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p></p>