输入一个r行c列(1≤r,c≤10)的网格,黑格用“*”表示,每个白格都填有一个字母。 如 果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出了网格边 界),则称这个白格是一个起始格。 首先把所有起始格按照从上到下、 从左到右的顺序编号为1, 2, 3,…,如图3-7所示。
图3-7 r行c列网格接下来要找出所有横向单词(Across)。 这些单词必须从一个起始格开始,向右延伸到 一个黑格的左边或者整个网格的最右列。 最后找出所有竖向单词(Down)。 这些单词必须 从一个起始格开始,向下延伸到一个黑格的上边或者整个网格的最下行。 输入输出格式和样 例请参考原题#includeusing namespace std;char cA[10][10];//crowssword Answersint r,c;typedef pair P;P p1;typedef struct{ P coordinate; bool across; bool down;}ad;//起始点数组,记录当前点坐标以及能否横纵向输出单词ad b[100];int main(){ //freopen("input.txt","r",stdin); int kase=0; while(~scanf("%d%d",&r,&c)&&r&&c){ getchar(); kase++; if(kase>=2) printf("\n"); printf("puzzle #%d:\n",kase); for(int i=0;i<100;i++){//初始化起始点数组; b[i].across=false; b[i].down=false; } char ca; for(int i=0;i
#include#include #include #define mem(x) memset(x,0,sizeof(x))using namespace std;int n,m;string maze[11];int flag[11][11]={0};void fun(int y,int x,int direct){ if(direct == 1) { printf("%3d.",flag[y][x]); for(int j = x;j >n) { mem(flag); if(n==0) break; ++kase; if(kase!=1) cout< >m; for(int i=0;i >maze[i]; } int tag = 0; for(int i=0;i