您的位置:首页 > 其它

hihocoder #1094 : Lost in the City

2017-09-13 21:11 330 查看
思路:暴力枚举,a[3][3]可能存在4中情况,对a做旋转,依次与map进行匹配。

下面的代码存在问题,当a为对称矩阵时,正确答案会多次输出

#include<iostream>
#include<string>
using namespace std;
void rotate(char a[3][3])
{
char b[3][3];
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
b[i][j]=a[3-j-1][i];
}
}

for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
a[i][j]=b[i][j];
}
}

}

int main()
{
int M,N,i,j,k;
char map[200][200],a[3][3];
freopen("input.txt","r",stdin);
cin>>N>>M;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
cin>>map[i][j];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(i=1;i<N-1;i++)
{
for(j=1;j<M-1;j++)
{
if(map[i][j]==a[1][1])
{
for(k=0;k<4;k++)
{
if((a[0][0]==map[i-1][j-1])&&(a[0][1]==map[i-1][j])&&(a[0][2]==map[i-1][j+1])&&(a[1][0]==map[i][j-1])&&(a[1][2]==map[i][j+1])&&(a[2][0]==map[i+1][j-1])&&(a[2][1]==map[i+1][j])&&(a[2][2]==map[i+1][j+1]))
{
printf("%d %d\n",i+1,j+1);
}
rotate(a);
}

}
}

}

return 0;
}
修改后AC的代码如下:
#include<iostream>
#include<string>
using namespace std;
void rotate(char a[3][3])
{
char b[3][3];
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
b[i][j]=a[3-j-1][i];
}
}

for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
a[i][j]=b[i][j];
}
}

}

int main()
{
int M,N,i,j,k,flag;
char map[200][200],a[3][3];
//freopen("input.txt","r",stdin);
cin>>N>>M;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
cin>>map[i][j];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(i=1;i<N-1;i++)
{
for(j=1;j<M-1;j++)
{
if(map[i][j]==a[1][1])
{
flag=0;
for(k=0;k<4;k++)
{
if((a[0][0]==map[i-1][j-1])&&(a[0][1]==map[i-1][j])&&(a[0][2]==map[i-1][j+1])&&(a[1][0]==map[i][j-1])&&(a[1][2]==map[i][j+1])&&(a[2][0]==map[i+1][j-1])&&(a[2][1]==map[i+1][j])&&(a[2][2]==map[i+1][j+1]))
{
flag=1;
}
rotate(a);
}
if(flag==1)
printf("%d %d\n",i+1,j+1);

}
}

}

return 0;
}


总结:矩阵旋转程序是从网上找的,用指针操作应该更便捷,好久没用指针,不太熟悉,下去得好好看看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  矩阵旋转