矩阵是否含距离k的重复值

来源:互联网 发布:鼠标宏编程怎么设置 编辑:程序博客网 时间:2024/06/05 20:24

帮人做的一个题,矩阵啊啊啊啊

也算是复习了一下,二维数据的动态分配内存和释放了

不知道还有没有更简单的方法,有没有自己没考虑到的细节了

矩阵中找到有木有距离为K的重复值

/*第一题:Array Matrix.Write a function that determines whether a two dimensional arraycontains duplicate values within k indices of each other .The first line of input will be a numberindicating how many rows are in the matrix.This will be followed by lines of input one for each row of the matrixeach row will contain the same number of columnswith each column separated by a space.Following the matrix will be a single line of inputcontaining a number indicating the k value.Output should be ‘YES’ or ‘NO’example:41 2 3 45 6 7 89 10 11 1213 14 15 16341 2 3 45 6 7 89 10 11 1211 14 15 163Output: No*/#include<iostream>using namespace std;//初始化,动态分配内存int ** initmatrix(int rows){    int **matrix = new int*[rows];    for(int i = 0;i< rows;i++)    {        matrix[i]= new int[rows];    }    return matrix;}//释放void deletematrix(int** matrix,int rows){    for(int i = 0;i< rows;i++)    {        delete []matrix[i];    }    delete []matrix;}//赋值void getmatrix(int** matrix,int rows){    for(int i = 0;i< rows;i++)    {        for(int j = 0;j<rows;j++)            cin>>matrix[i][j];    }}//打印矩阵void printmatrix(int** matrix,int rows){    for(int i = 0;i< rows;i++)    {        for(int j = 0;j<rows;j++)            cout<<matrix[i][j];        cout<<endl;    }}/*思路:既然知道indice,所以干脆找到和它距离为K的元素,开始比较找举例为K的原则:向下,向右/左应该复杂度比比较每个元素,然后计算他们之间的距离小*/int duplicate(int ** matrix,int rows,int indice){    for(int i=0;i<rows;i++)    {        for(int j = 0;j< rows;j++)        {           int cur = matrix[i][j];//当前待比较元素           for(int ik =0;ik<=indice;ik++) //           {               //ik 向下,jk向左右               if(i+ik>=rows)//向下的距离超出矩阵维度,可以跳出了                    break;               int jk = indice-ik;               if(j+jk<rows) //向右的距离在矩阵维度内               {                   if(cur == matrix[i+ik][j+jk])                   {                     cout<<"YES";                     return 1;                   }               }               if(j-jk<rows) //向左的距离在矩阵维度内               {                   if(cur == matrix[i+ik][j-jk])                    {                     cout<<"YES";                     return 1;                   }               }           }        }    }    cout<<"NOPE";    return 0;}int main(){    int rows;    cin>>rows;    int ** matrix = initmatrix(rows);    getmatrix(matrix,rows); //   printmatrix(matrix,rows);    int indice;    cin>>indice;    if(indice < 1)    {        cout<<"NO"<<endl;        return 0;    }    duplicate(matrix,rows,indice);    deletematrix(matrix,rows);    return 0;}


0 0
原创粉丝点击