题解:

//#include <bits/stdc++.h>
#include "stdio.h"
#include "iostream"
#include "algorithm"
#define ll long long    //定义宏
#define sc scanf
#define pr printf

using namespace std;
char s[15][15];
int main() {
    int n, m;
    ios::sync_with_stdio(false);
    while (sc("%d%d", &n, &m) > 0 /*!= EOF*/) { /*> 0*/ 
        int a = 0, b = 0, c = 0, d = 0;
        int cnt = 0;
        for (int i = 1; i <= n; i++) {
            sc("%s",s[i] + 1);
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (s[i][j] == '1'){
                    a = i, b = j;
                    goto q1;
                }
            }
        }
    q1:;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if(s[i][j] == '1'){
                    cnt++;
                }
            }
        }
        for (int i = n; i >= 1; i--){
            for (int j = m; j >= 1; j--) {
                if (s[i][j] == '1') {
                    c = i; d = j;
                    goto q2;
                }
            }
        }
    q2:;
        for (int i = a; i <= c; i++)
        {
            for (int j = b; j <= d; j++) {
                if (s[i][j] != '1') {
                    pr("No\n");
                    goto q;
                }
            }
        }
        if (cnt == (c - a + 1) * (d - b + 1)) {
            pr("Yes\n");
        }
        else {
            pr("No\n");
        }
    q:;
    }
    return 0;
}

goto与break语句的区别还是挺大的;
break只跳出当前循环,而goto则是想跳哪就跳哪;
一般不介意使用goto语句,因为goto容易造成逻辑混乱,
而所有能用goto语句实现的功能都能用其他语句代替;
想了解更多可以自己百度,毕竟能动手,就不要哔哔。