下面是我在贴吧看到的一个题,我试着编了下,如果你有更好的解法,请回复我!!!
题目意思大概这样:有一个6*6数组,下面给出数组,随机输入x,y,求和当前选取的坐标x,y相同值的数组元素有多少个(不是全局扫描,是当前选取点的上下左右相同的点值相同,并且相同的点的上下左右做同样计数)
数组如下:
#include<iostream>
using namespace std;
int main()
{
int a[6][6]={{1,1,1,0,0,0},
{0,0,0,0,0,1},
{1,0,1,1,1,0},
{0,1,1,1,1,0},
{1,0,0,1,0,1},
{0,0,1,1,0,0}};
return 0;
}
示例1:如果x=3,y=3,就是选取了a[3][3]这个点,和他相关相同值的点有a[3,4],a[3,5],a[4,1],a[4,2],a[4,3],a[4,4],a[5,3],a[6,2],a[6,3],加上自己,总共有10个点。
示例2:如果x=0,y=0,就是选择了a[0][0]这个点,和他相关相同值的点有a[0,1],a[0,2],a[0,3],a[0,4],a[1,1],加上自己,总共有6个点。
输入x,y,求出相同点数。
数组如下:
#include<iostream>
using namespace std;
int main()
{
int a[6][6]={{1,1,1,0,0,0},
{0,0,0,0,0,1},
{1,0,1,1,1,0},
{0,1,1,1,1,0},
{1,0,0,1,0,1},
{0,0,1,1,0,0}};
return 0;
}
示例1:如果x=3,y=3,就是选取了a[3][3]这个点,和他相关相同值的点有a[3,4],a[3,5],a[4,1],a[4,2],a[4,3],a[4,4],a[5,3],a[6,2],a[6,3],加上自己,总共有10个点。
示例2:如果x=0,y=0,就是选择了a[0][0]这个点,和他相关相同值的点有a[0,1],a[0,2],a[0,3],a[0,4],a[1,1],加上自己,总共有6个点。
输入x,y,求出相同点数。
#include <iostream>
using namespace std;
void shuchu(int x,int y); //输出区域中的坐标
int panduan(int x,int y); //判断坐标已经存在
void cunfang(int x,int y);//存放数据到fuzhu数组中
typedef struct
{
int hen;//hen为横坐标
int zon;//zon为纵坐标
}f;//记录每个域的值
f fuzhu[36];//最多连续36个点
static int count=0;//记录坐标的个数(cout+1)
int shuju[6][6]= //这个二维数组可自由变动,以下的数据是我随便打的
{
{0,1,0,1,1,1},
{0,0,0,0,1,0},
{1,1,1,1,1,0},
{1,0,1,0,1,0},
{1,0,1,0,0,0},
{0,0,0,0,1,1}
};
int main()
{ int x1,y1;//x为横坐标,y为纵坐标
int i,j;
cout<<"这个区域的数据:"<<endl<<endl;
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
cout<<shuju[i][j]<<" ";
}cout<<endl;
}
cout<<endl<<"输入坐标x,y的值:";
cin>>x1>>y1;
fuzhu[0].hen=x1;fuzhu[0].zon=y1;
shuchu(x1,y1);
cout<<"四周连续相同点数是: "<<count<<endl;
for(i=0;i<=count;i++)
{
cout<<"("<<fuzhu[i].hen<<","<<fuzhu[i].zon<<")";
if(i%4==0)cout<<endl;
}
cout<<endl;
system("pause");
return 0;
}
int panduan(int a,int b) //等于1时,fuzhu数组中不存在这个坐标
{ int i;
for (i=0;i<count;i++)
{
if (fuzhu[i].hen==a&&fuzhu[i].zon==b)
{
return 0;
}
}
return 1;
}
void cunfang(int a,int b)
{
fuzhu[count].hen=a;
fuzhu[count].zon=b;
}
void shuchu(int x,int y)
{
if((shuju[x][y+1]==shuju[x][y])&&(-1<y+1)&&(y+1<6)) //判断这个坐标上方的值是否等于这个坐标值并且防止这个坐标超出范围
{
if(panduan(x,y+1)==1)
{
count++;
cunfang(x,y+1);
shuchu(x,y+1);
}
}
if((shuju[x-1][y]==shuju[x][y])&&(-1<x-1)&&(x-1<6))
{
if(panduan(x-1,y)==1)
{
count++;
cunfang(x-1,y);
shuchu(x-1,y);
}
}
if((shuju[x+1][y]==shuju[x][y])&&(-1<x+1)&&(x+1<6))
{
if(panduan(x+1,y)==1)
{
count++;
cunfang(x+1,y);
shuchu(x+1,y);
}
}
if((shuju[x][y-1]==shuju[x][y])&&(-1<y-1)&&(y-1<6))
{
if(panduan(x,y-1)==1)
{
count++;
cunfang(x,y-1);
shuchu(x,y-1);
}
}
}
下面为运行结果: