从标准输入中输入一个N(N<=9)阶矩阵和一个M(M<=N)阶矩阵,判断矩阵M是否是N的子矩阵,若是则输出M在N中的起始位置,若不是则输出-1。若矩阵M能与N中某一区域完全相等,则称M是N的子矩阵。c语言代码
时间: 2023-06-09 11:08:48 浏览: 325
抱歉,ChitGPT不支持编程执行功能。但是,以下是一个简单的C语言程序,希望它能帮助你实现你的需求。
```c
#include <stdio.h>
int main()
{
int n, m, i, j, k, l, flag, row, col;
int N[10][10], M[10][10];
// 读入矩阵N和M
printf("请输入一个N(N<=9)阶矩阵:\n");
scanf("%d", &n);
printf("请输入N个数字,组成一个%d x %d的矩阵:\n", n, n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &N[i][j]);
}
}
printf("请输入一个M(M<=N)阶矩阵:\n");
scanf("%d", &m);
printf("请输入M个数字,组成一个%d x %d的矩阵:\n", m, m);
for (i = 0; i < m; i++) {
for (j = 0; j < m; j++) {
scanf("%d", &M[i][j]);
}
}
// 判断M是否是N的子矩阵
flag = 0;
for (i = 0; i <= n - m; i++) {
for (j = 0; j <= n - m; j++) {
for (k = 0; k < m; k++) {
for (l = 0; l < m; l++) {
if (M[k][l] != N[i+k][j+l]) {
break;
}
}
if (l < m) {
break;
}
}
if (k == m) {
flag = 1;
row = i;
col = j;
break;
}
}
if (flag) {
break;
}
}
// 输出结果
if (flag) {
printf("M在N中的起始位置是 (%d, %d)\n", row+1, col+1);
} else {
printf("-1\n");
}
return 0;
}
```
该程序最内层的循环先遍历子矩阵M中的元素,然后再遍历N中与M对应位置的元素,比较它们的值是否相等。如果有不相等的元素,则退出当前循环。如果M中的所有元素都与对应位置的N中的元素相等,则说明M是N的子矩阵。
阅读全文