几个小结论:
1.路径长度=i+j-1;
2.最简单的走法是先横走再竖着走或者先竖着走再横着走

#include<cstdio> #include<cstring> using namespace std; void print(int x,int y) { for(int i=1; i<=y; i++) printf("(1,%d) ",i); for(int i=2; i<=x; i++) printf("(%d,%d) ",i,y); printf(" "); } int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); int cnt=0; int ans=0; int l,i; for(l=2;; l++) { for(i=1; i<=n&&i<l; i++) { if(l-i>m)continue; ans+=l-1; cnt++; if(cnt>=k)break; } if(cnt>=k)break; } printf("%d ",ans); // printf("%d %d ",l,i); for(; i>=1; i--) { if(l-i>m)break; print(i,l-i); } l--; for(; l>=2; l--) for(i=1; i<l&&i<=n; i++) { if(l-i>m)continue; print(i,l-i); } return 0; }